hdu 1026 Ignatius and the Princess I(广搜+优先队列)
2014-02-01 23:03
453 查看
/*
题意:输出点(0,0)到(n-1,m-1)的最短路径。有数字的地方表示停留的时间。
解题:简单的广搜,就是多了一个路径的保存。在搜素的过程中用标记数组mark表示是否经过,顺便保存方向
*/
题意:输出点(0,0)到(n-1,m-1)的最短路径。有数字的地方表示停留的时间。
解题:简单的广搜,就是多了一个路径的保存。在搜素的过程中用标记数组mark表示是否经过,顺便保存方向
*/
#include<iostream> #include<string> #include<queue> #include<cstring> using namespace std; #define inf = 0xffffff const int N=110; int n, m, mark , time, dir[4][2]={1,0, 0,1 ,-1,0, 0,-1}, step; char str ; struct node { int x, y, step; friend bool operator < (node n1, node n2) { return n2.step < n1.step; } }; int judge(int x, int y) { if(x>=0 && x<n && y>=0 && y<m && mark[x][y]==0 && str[x][y] != 'X') return 1; else return 0; } int bfs(int x, int y) { priority_queue<node>q; node cur, next; int i; cur.x = n-1; cur.y = m-1;; cur.step=0; q.push(cur); while(!q.empty()) { cur=q.top(); q.pop(); if(cur.x==0 && cur.y==0) return cur.step; for( i=0; i < 4; i++ ) { next.x = x = cur.x+dir[i][0]; next.y = y = cur.y+dir[i][1]; int t=0; if(str[x][y]>'0' && str[x][y]<='9') t = str[x][y]-'0'; next.step = cur.step+t+1; if(judge(x, y)) { mark[x][y]=i+1; q.push(next); } } } return -1; } void print(int x, int y) { int next_x, next_y; if(x==n-1 && y==m-1) return ; next_x = x - dir[mark[x][y]-1][0]; next_y = y - dir[mark[x][y]-1][1]; int t = str[next_x][next_y] -'0'; printf("%ds:(%d,%d)->(%d,%d)\n", time++, x,y, next_x,next_y); if(t>0 && t<=9) { int i; for( i=0; i < t; i++) printf("%ds:FIGHT AT (%d,%d)\n", time++, next_x, next_y); } print(next_x, next_y); } int main() { int i, step; while(scanf("%d%d", &n, &m) != EOF ) { step = 0; for( i=0; i < n; i++ ) scanf("%s", str[i]); memset(mark, 0, sizeof(mark)); mark[n-1][m-1]=5; step = bfs(n-1, m-1); if(step==-1) printf("God please help our poor hero.\n"); else { time=1; if(str[n-1][m-1]>'0' && str[n-1][m-1]<='9' && n!=1 && m!=1) step += str[n-1][m-1]-'0'; if(str[0][0]>'0' && str[0][0]<='9' && n!=1 && m!=1) step -= str[0][0]-'0'; printf("It takes %d seconds to reach the target position, let me show you the way.\n", step); print(0, 0); } printf("FINISH\n"); } return 0; }
相关文章推荐
- hdu 1026 Ignatius and the Princess I(优先队列bfs+dfs输出)
- HDU 1026 Ignatius and the Princess I(优先队列+打印路径)
- HDU1026——Ignatius and the Princess I (优先队列+bfs)
- HDU 1026 Ignatius and the Princess I(广搜+优先队列)
- HDU 1026 Ignatius and the Princess I 【BFS(优先队列)+路径存储】
- HDU 1026 Ignatius and the Princess I (优先队列+BFS(广度优先搜索))
- HDU 1026 Ignatius and the Princess I(BFS、优先队列)
- HDU 1026 Ignatius and the Princess I(广搜+路径记录+优先队列)
- HDU1026 - Ignatius and the Princess I (广搜+优先队列)
- HDU 1026 Ignatius and the Princess I(优先队列bfs)
- hdu 1026 Ignatius and the Princess I (bfs记录路径 两种记录路径方法模拟优先队列和优先队列两种做法)
- [HDU] 1026 Ignatius and the Princess I 简单建模后广搜索求最短路径生成树
- hdu 1026 Ignatius and the Princess I【bfs+路径打印】经典题目
- hdu 1026 Ignatius and the Princess I(优先队列+BFS)
- hdu 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I (bfs+手写队列保存路径)
- HDU 1026 Ignatius and the Princess I(广搜)
- [HDU 1026] Ignatius and the Princess I BFS
- hdu1026——Ignatius and the Princess I
- hdu 1026(Ignatius and the Princess I)BFS