Ignatius and the Princess I HDU
来源:互联网 发布:angularjs源码解读 编辑:程序博客网 时间:2024/06/10 03:58
点击打开链接
还是bfs+优先队列 难点就是保存节点
此题用STL的优先队列 但麻烦就是弹出的节点无法保存 求路径比较麻烦
不用STL的话模拟这个过程又太麻烦..
最后想出再开个专门存 路径中某节点的父节点位置 的二维结构体数组
虽然由起点至终点每个点最多可向三个方向各自扩展出一个子节点 哪个方向的子节点才是最短路径中的节点无法确定
但是从终点回溯 其父节点是唯一的 因此最终递归输出就可
#include <stdio.h>#include <queue>using namespace std;struct node{ friend bool operator< (node n1,node n2) { return n1.s>n2.s; } int x; int y; int s;};struct spot{ int fx; int fy;};struct spot last[100][100];int book[100][100];int n,m,time,px,py,flag,num;char map[100][101];void bfs();void output(int x,int y);int main(){ int i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) { scanf("%s",map[i]); } for(i=0;i<n;i++) { for(j=0;j<m;j++) { book[i][j]=0; } } flag=0; bfs(); if(flag==1) { printf("It takes %d seconds to reach the target position, let me show you the way.\n",time); num=1; output(px,py); } else { printf("God please help our poor hero.\n"); } printf("FINISH\n"); } return 0;}void bfs(){ priority_queue <struct node> que; struct node cur,t; int next[4][2]={0,-1,-1,0,0,1,1,0}; int i,tx,ty; t.x=0; t.y=0; t.s=0; que.push(t); book[0][0]=1; last[0][0].fx=-1; last[0][0].fy=-1; while(!que.empty()) { cur=que.top(); que.pop(); for(i=0;i<4;i++) { tx=cur.x+next[i][0]; ty=cur.y+next[i][1]; if(tx<0||tx>n-1||ty<0||ty>m-1||map[tx][ty]=='X'||book[tx][ty]==1) { continue; } t.x=tx; t.y=ty; t.s=cur.s+1; if(map[tx][ty]>='1'&&map[tx][ty]<='9') { t.s+=(map[tx][ty]-'0'); } que.push(t); book[tx][ty]=1; last[tx][ty].fx=cur.x; last[tx][ty].fy=cur.y; if(tx==n-1&&ty==m-1) { flag=1; px=tx,py=ty,time=t.s; return; } } } return;}void output(int x,int y){ int i; if(last[x][y].fx==-1&&last[x][y].fy==-1) { return; } output(last[x][y].fx,last[x][y].fy); printf("%ds:(%d,%d)->(%d,%d)\n",num++,last[x][y].fx,last[x][y].fy,x,y); if(map[x][y]>='1'&&map[x][y]<='9') { for(i=0;i<map[x][y]-'0';i++) { printf("%ds:FIGHT AT (%d,%d)\n",num++,x,y); } } return;}
阅读全文
0 0
- hdu 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu - 1026 - Ignatius and the Princess I
- HDU-1026Ignatius and the Princess I
- HDU-1026-Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu-1026-Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- [ACM] hdu Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- HDU - 1026 Ignatius and the Princess I
- android UI框架
- ARCGISENGINE给要素赋值时发现的一个问题
- QSQLITE使用整理,sql常用语句
- MySQL 管理
- C#Lab(一):结构体包含引用、结构体实现接口后是引用类型还是值类型
- Ignatius and the Princess I HDU
- MySQL 连接
- Let the Balloon Rise
- XCode8.3.3更新失败
- STM32——优先级NVIC_PriorityGroupConfig的理解及其使用
- MySQL 创建数据库
- 6.截图
- Ulua使用DoTween教程
- MySQL 删除数据库