思路 : 优先队列  每次都取最小的时间,遇到了终点直接就输出

#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 ;
}

最新文章

  1. dagger2 备注
  2. iPad 控件 UIPopoverPresentationController 使用 iPhone可用
  3. CSS Float 以及相关布局模式
  4. Mysql数据库int(1)和tinyint(1)的区别&amp;&amp;扩展阅读
  5. Gems
  6. 【基础】常用的机器学习&amp;数据挖掘知识点
  7. java对数据库的操作
  8. iOS开发——获取手机当前WiFi名和MAC地址
  9. Spring(一)
  10. C++语言之析构函数与构造函数
  11. Scrapy创建项目问题
  12. 关于Rabbitmq的routingkey的作用
  13. VS2017 处理 Rdlc , microsoft report viewer 轻量级报表处理(WPF CS客户端版本)
  14. MVC、MVP和MVVC区别
  15. 关于ionic2打包android时gradle下载不了的解决方法(附:简单优化启动速度彩蛋)
  16. 尚硅谷面试第一季-16 JVM垃圾回收机制
  17. ABP框架系列之一:(Entity-实体)
  18. Docker安装websphere(四)
  19. mysql事务(一)——redo log与undo log
  20. S5PV210 移植无线wifi网卡 MT7601

热门文章

  1. Spring04——Spring MVC 全解析
  2. 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝
  3. (线段树 -星星等级)Stars POJ - 2352
  4. python中的函数及作用域的理解
  5. K 最近邻(k-nearest neighbours,KNN)算法
  6. iOS 第三方库
  7. __str_方法和__repr__的区别
  8. Ubuntu系统在Anaconda中安装Python3.6的虚拟环境
  9. Java String与char
  10. WDK驱动开发点滴