HDU1026 Ignatius and the Princess I 优先队列宽搜+路径输出
来源:互联网 发布:福山大学知乎 编辑:程序博客网 时间:2024/06/05 15:16
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<string>using namespace std;const int INF=0x3f3f3f3f;const int MAXN=105;const int MAXM=105;int n,m,i;int done[MAXN][MAXM];int sx,sy,ex,ey;char map[MAXN][MAXM];int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};int en,p[MAXN][MAXM];struct node{int x,y,w,id,pre;node(int xx=0,int yy=0,int ww=0,int i=0,int pr=0){x=xx;y=yy;w=ww;id=i;pre=pr;}friend bool operator<(const node &a,const node &b){return a.w>b.w;}}que[10010];bool is_ill(int x,int y){if(x<0||x>=n||y<0||y>=m)return 1;return 0;}int bfs(){ priority_queue<node> q; en=0; que[en].x=0,que[en].y=-1,que[en].w=-1; que[en].pre=-1; q.push(que[en++]); memset(done,0,sizeof(done)); while(!q.empty()) { node e=q.top(); q.pop(); for(int i=0;i<4;i++) { int x=e.x+dx[i]; int y=e.y+dy[i]; if(!is_ill(x,y)&&!done[x][y]&&map[x][y]!='X') { que[en].x=x; que[en].y=y; que[en].id=en; que[en].w=e.w+(map[x][y]=='.'?1:map[x][y]-'0'+1); que[en].pre=e.id; if(x==n-1 && y==m-1) return en; q.push(que[en++]); done[x][y]=1; } } } return -1;}void showpath(int id){ int pre=que[id].pre; int x=que[id].x; int y=que[id].y; int px=que[pre].x; int py=que[pre].y; if(que[id].pre==1) { printf("%ds:(%d,%d)->(%d,%d)\n",que[pre].w+1,px,py,x,y); if(map[x][y]!='.') { int w=map[x][y]-'0'; for(int i=1;i<=w;i++) printf("%ds:FIGHT AT (%d,%d)\n",que[pre].w+i+1,x,y); } } else { showpath(pre); printf("%ds:(%d,%d)->(%d,%d)\n",que[pre].w+1,px,py,x,y); if(map[x][y]!='.') { int w=map[x][y]-'0'; for(int i=1;i<=w;i++) printf("%ds:FIGHT AT (%d,%d)\n",que[pre].w+i+1,x,y); } }}int main(){//freopen("123.txt","r",stdin);while(~scanf("%d%d\n",&n,&m)){for(i=0;i<n;i++)gets(map[i]);sx=sy=0;ex=n-1;ey=m-1;int ans;if(map[0][0]=='X'||map[n-1][m-1]=='X')ans=-1;else ans=bfs();if(ans>=0){printf("It takes %d seconds to reach the target position, let me show you the way.\n",que[ans].w);showpath(ans);}else printf("God please help our poor hero.\n");printf("FINISH\n");}return 0;}
0 0
- HDU1026 Ignatius and the Princess I 优先队列宽搜+路径输出
- hdu1026 Ignatius and the Princess I (优先队列 BFS)
- HDU1026 Ignatius and the Princess I 优先队列
- HDU1026:Ignatius and the Princess I(BFS+优先队列)
- hdu1026 Ignatius and the Princess I(BFS+优先队列)
- HDU1026 Ignatius and the Princess I(优先队列+BFS)
- HDU1026 Ignatius and the Princess I(优先队列加记录路径)
- hdu1026 Ignatius and the Princess I(bfs+优先队列+记录路径)
- HDU1026 - Ignatius and the Princess I (广搜+优先队列)
- HDU1026 Ignatius and the Princess I(广搜与优先队列)
- hdu1026 Ignatius and the Princess I(广搜+记录路径)
- HDU-1026 Ignatius and the Princess I(广搜+优先队列+输出路径)
- hdu1026 Ignatius and the Princess I(广度优先搜索)
- HDU1026——Ignatius and the Princess I (优先队列+bfs)
- Hdu 1026 Ignatius and the Princess I (BFS 优先队列+路径输出)
- Ignatius and the Princess I (hdu 1026 优先队列+bfs+输出路径)
- HDU 1026 Ignatius and the Princess I 【优先队列+路径输出】
- HDU 1026 Ignatius and the Princess I【BFS+优先队列+栈路径输出】
- errorLNK1123:转换到COFF期间失败:文件无效或损坏的解决方案
- QByteArray
- 从内存文件中搜索指针环
- java 15:静态变量,方法,常量
- cocos2d-x: 死磕"HelloWorld"(2)——应用实例的创建
- HDU1026 Ignatius and the Princess I 优先队列宽搜+路径输出
- PKU 2777 Count Color (线段树区间更新)
- 利用windbg的插件pykd以虚拟地址导出虚拟机的整个内存
- Ubuntu14 root 自动登陆 root auto logon
- mysql免安装文件怎么使用
- open与fopen
- C++语言笔记系列之十二——C++的继承
- 友元
- Redis内存使用优化与存储