HDU 1242 Rescue(bfs+优先队列)
来源:互联网 发布:linux 百度云盘同步 编辑:程序博客网 时间:2024/05/20 17:27
Description
一个n*m地图,r为起点,a为终点,x是守卫,.可以走,#不可走,走一步需要一单位时间,如果要走守卫所在位置需多花一单位时间,问从起点到终点的最短用时
Input
第一行两个整数n和m表示地图规模,之后一个n*m矩阵表示该地图(n,m<=200)
Output
输出起点到终点的最短用时
Sample Input
Sample Output
13
Solution
点有两种,耗时为1的普通点和耗时为2的守卫点,在bfs过程中用优先队列维护点,每次拿出耗时最少的点扩张
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 222struct node{ int x,y,step; bool operator <(const node &b)const { return step>b.step; }};int dx[]={-1,0,1,0};int dy[]={0,-1,0,1};int n,m,dis[maxn][maxn];char s[maxn][maxn];int bfs(node a){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dis[i][j]=INF; dis[a.x][a.y]=0; priority_queue<node>que; que.push(a); while(!que.empty()) { node now=que.top(); que.pop(); int x=now.x,y=now.y,step=now.step; if(s[x][y]=='a')return step; for(int i=0;i<4;i++) { int xx=x+dx[i],yy=y+dy[i]; if(xx<1||xx>n||yy<1||yy>m||s[xx][yy]=='#')continue; node temp; temp.x=xx,temp.y=yy,temp.step=step+1; if(s[xx][yy]=='x')temp.step++; if(dis[xx][yy]>temp.step) { dis[xx][yy]=temp.step; que.push(temp); } } } return INF;}int main(){ while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++)scanf("%s",s[i]+1); node a; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(s[i][j]=='r')a.x=i,a.y=j,a.step=0; int ans=bfs(a); if(ans!=INF)printf("%d\n",ans); else printf("Poor ANGEL has to stay in the prison all his life.\n"); } return 0;}
阅读全文
0 0
- hdu 1242Rescue(bfs+优先队列)
- hdu 1242 Rescue (优先队列+bfs)
- HDU 1242 Rescue(BFS +优先队列)
- HDU 1242 Rescue(BFS,优先队列)
- hdu 1242 Rescue(BFS优先队列)
- HDU 1242 Rescue(优先队列+bfs)
- hdu 1242 Rescue(BFS+优先队列)
- HDU 1242 Rescue(BFS+优先队列)
- hdu 1242 Rescue (BFS+优先队列)
- HDU 1242 Rescue (BFS+优先队列)
- HDU-1242-Rescue(优先队列+BFS)
- HDU 1242 Rescue(BFS+优先队列)
- HDU 1242 Rescue(bfs+优先队列)
- HDU:1242 Rescue(BFS+优先队列)
- HDU 1242 Rescue(BFS+【优先队列】)
- HDU 1242 Rescue(BFS+优先队列)
- 【HDU】-1242-Rescue(BFS+优先队列)
- HDU 1242 Rescue (BFS+优先队列)
- IntelliJ IDEA 17添加jar包
- C primer plus(编程练习)file-4.8-3
- android.view.InflateException: Binary XML file line自定义view的构造函数引起
- pytorch 学习笔记之编写 C 扩展,又涨姿势了
- C++遍历文件夹的所有文件
- HDU 1242 Rescue(bfs+优先队列)
- 矢量线形符号文件格式设计
- C primer plus(编程练习)file-4.8-4
- java小项目-验证码的生成以及验证
- Linux启动管理
- vue.js学习笔记(三)--父子组件通信总结
- linux基本命令及操作2
- Zookeeper常用命令
- JS判断客户端是否是iOS或者Android手机移动端