Rescue BFS+优先队列 杭电1242
2024-09-07 09:03:45
思路 : 优先队列 每次都取最小的时间,遇到了终点直接就输出 #include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=; int n,m,sa,ea,sr,er; char arr[N][N];
int bb[N][N]={}; struct stu{
int a,b;
int time;
bool friend operator <(const stu &a,const stu &b){
return a.time>b.time;
}
}; int a[]={,,,-};
int br[]={,,-,}; void bfs(){
priority_queue<stu>que;
stu s;
s.a=sa;
s.b=ea;
s.time=;
que.push(s);
bb[sa][ea]=;
int flag=;
while(que.size()){
stu p;
p=que.top();
que.pop();
stu st;
for(int i=;i<;i++){
st.a=p.a+a[i];
st.b=p.b+br[i];
if(st.a>=&&st.b>=&&st.a<n&&st.b<m&&bb[st.a][st.b]!=&&arr[st.a][st.b]!='#'){
bb[st.a][st.b]=;
if(arr[st.a][st.b]=='x')
st.time=p.time+;
else {
st.time=p.time+;
}
que.push(st);
if(st.a==sr&&st.b==er)
{
cout<<st.time<<endl;
return ;
}
}
}
}
cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
return ;
} int main()
{
while(cin>>n>>m){
memset(bb,,sizeof(bb));
for(int i=;i<n;i++)
scanf("%s",&arr[i]);
for(int i=;i<n;i++){
for(int j=;j<m;j++)
{
if(arr[i][j]=='a'){
sa=i;
ea=j;
}
else if(arr[i][j]=='r'){
sr=i;
er=j;
}
}
}
bfs();
} return ;
}
最新文章
- dagger2 备注
- iPad 控件 UIPopoverPresentationController 使用 iPhone可用
- CSS Float 以及相关布局模式
- Mysql数据库int(1)和tinyint(1)的区别&;&;扩展阅读
- Gems
- 【基础】常用的机器学习&;数据挖掘知识点
- java对数据库的操作
- iOS开发——获取手机当前WiFi名和MAC地址
- Spring(一)
- C++语言之析构函数与构造函数
- Scrapy创建项目问题
- 关于Rabbitmq的routingkey的作用
- VS2017 处理 Rdlc , microsoft report viewer 轻量级报表处理(WPF CS客户端版本)
- MVC、MVP和MVVC区别
- 关于ionic2打包android时gradle下载不了的解决方法(附:简单优化启动速度彩蛋)
- 尚硅谷面试第一季-16 JVM垃圾回收机制
- ABP框架系列之一:(Entity-实体)
- Docker安装websphere(四)
- mysql事务(一)——redo log与undo log
- S5PV210 移植无线wifi网卡 MT7601