hdu1026 Ignatius and the Princess I(bfs+路径)
来源:互联网 发布:像素绘画软件 编辑:程序博客网 时间:2024/06/08 14:04
http://acm.hdu.edu.cn/showproblem.php?pid=1026
题意:求最短路长度、路径,有打怪操作,同样在路径中输出。
思路:很好的练习题吧,今天(2016/10/24)第二次做,打怪地方的标记初始化放在了结构体中,半天找不出错。好在改好了,1A~。
#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <string.h>#include <iostream>#include <queue>#include <stack>#include <ctype.h>using namespace std;typedef long long LL;const int N = 105;const int INF = 0x3f3f3f3f;char G[N][N];bool vis[N][N];int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};int n, m;struct node{ int x, y, step, prex, prey; int flag; friend bool operator < (const node &a, const node &b) { return a.step > b.step; }};node path[N][N];bool check(int x, int y){ if(x>=0 && x<n && y>=0 && y<m && !vis[x][y] && G[x][y]!='X') return true; else return false;}void bfs(int x, int y){ memset(vis, false, sizeof(vis)); priority_queue<node>que; node s; s.x = x; s.y = y; s.step = 0; vis[x][y] = true; que.push(s); while(!que.empty()) { node tmp = que.top(); que.pop(); if(tmp.x==n-1 && tmp.y==m-1) { path[tmp.x][tmp.y] = tmp; break; } for(int i = 0; i < 4; i++) { node tmp2; tmp2 = tmp; tmp2.x += dir[i][0]; tmp2.y += dir[i][1]; tmp2.step += 1; if(check(tmp2.x, tmp2.y)) { vis[tmp2.x][tmp2.y] = true; if(isdigit(G[tmp2.x][tmp2.y])) { tmp2.step += (G[tmp2.x][tmp2.y]-'0'); tmp2.flag = (G[tmp2.x][tmp2.y]-'0'); } else tmp2.flag = 0;//注意这里对flag赋值,不能在初始化结构体中赋值,不然输出有错 tmp2.prex = tmp.x; tmp2.prey = tmp.y; que.push(tmp2); path[tmp2.x][tmp2.y] = tmp2; } } }}void Print(){ stack<node>sta; node now = path[n-1][m-1]; if(now.step == 0) printf("God please help our poor hero.\n"); else { sta.push(now); printf("It takes %d seconds to reach the target position, let me show you the way.\n", now.step); while(1) { now = path[now.prex][now.prey]; sta.push(now); if(now.x==0 && now.y==0) break; } int time = 1; sta.pop(); while(!sta.empty()) { now = sta.top(); sta.pop(); if(now.flag == 0) printf("%ds:(%d,%d)->(%d,%d)\n", time++, now.prex, now.prey, now.x, now.y); else { printf("%ds:(%d,%d)->(%d,%d)\n", time++, now.prex, now.prey, now.x, now.y); for(int i = 1; i <= now.flag; i++) { printf("%ds:FIGHT AT (%d,%d)\n", time++, now.x, now.y); } } } } printf("FINISH\n");}int main(){ // freopen("in.txt", "r", stdin); while(~scanf("%d%d", &n, &m)) { memset(path, 0, sizeof(path)); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) { cin >> G[i][j]; } bfs(0, 0); Print(); } return 0;}
0 0
- 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 bfs 路径保存
- 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(BFS)
- HDU1026 Ignatius and the Princess I(BFS)
- HDU1026——Ignatius and the Princess I(BFS)
- Ignatius and the Princess I(hdu1026,带权值的bfs)
- 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(BFS+优先队列)
- hdu1026 Ignatius and the Princess I(BFS+优先队列)
- HDU1026 Ignatius and the Princess I(优先队列+BFS)
- hdu1026 Ignatius and the Princess I BFS之打印路径 虐死我得一个题
- 数组中出现次数超过一半的数字
- 一个英语学渣是如何通过英语六级的
- 编程之美-饮料供货方法整理
- Exploring ES6(Leanpub ‘15)笔记(仅目录提纲)
- 《leetCode》:Permutations
- hdu1026 Ignatius and the Princess I(bfs+路径)
- C语言实现链表之单向链表(六)删除头结点
- U盘刻录GSMS软件系统ISO文件教程
- 【DP】 HDU 3229 Jinyuetuan Puzzle
- 第八周--数据结构--字符串加密
- 重叠I/O详解
- zabbix设置sendmail发送邮件
- C语言实现链表之单向链表(七)尾结点后插入结点
- Java控制double输出的小数点位数