杭电OJ 1026:Ignatius and the Princess I
来源:互联网 发布:python 语音实时采集 编辑:程序博客网 时间:2024/06/04 23:18
比较麻烦的一道题目,自己刚开始思路不清楚,错了很多次,后来看了别人的解答,才找出错误的地方。
#include <iostream>#include <queue>#include <stack>#include <fstream>using namespace std;int dir[][2] = {{-1,0},{1,0},{0,-1},{0,1}};typedef struct node {int i, j;int time;friend bool operator<(node n1, node n2)//按照时间大小从小到大排列{return n1.time > n2.time;}}Node;typedef struct {int i;int j;}Point;char map[100][100];//记录整个地图bool used[100][100];//标记是否已经搜索过Point result[100][100];//记录达到某一点的前一个位置,通过回溯找到路径int n, m;//表示地图的大小int bfs()//广度搜索,返回到达终点的最小时间数值{priority_queue<Node> Q;//优先级队列Node start;start.i = 0;start.j = 0;start.time = 0;Point tempP;tempP.i = -1;tempP.j = -1;result[0][0] = tempP;used[0][0] = true;Q.push(start);while(!Q.empty()){Node tempN = Q.top();Q.pop();for (int k = 0; k < 4; ++ k){int ni = tempN.i + dir[k][0];int nj = tempN.j + dir[k][1];if (ni >= 0 && ni < n && nj >= 0 && nj < m && !used[ni][nj] && map[ni][nj] != 'X'){Node temp;temp.i = ni;temp.j = nj;if (map[ni][nj] == '.')temp.time = tempN.time + 1;elsetemp.time = tempN.time + map[ni][nj] - '0' + 1;used[ni][nj] = true;Point tp;tp.i = tempN.i;tp.j = tempN.j;result[ni][nj] = tp;if (ni == n - 1 && nj == m - 1)return temp.time;Q.push(temp);}}}return -1;}int main (){while (cin >> n >> m){for (int i = 0; i < n ; ++ i)for (int j = 0; j < m ; ++ j){cin>>map[i][j];used[i][j] = false;}int t = bfs();if (t == -1){cout<<"God please help our poor hero."<<endl;cout <<"FINISH"<<endl;}if (t != -1){cout <<"It takes "<<t<<" seconds to reach the target position, let me show you the way."<<endl;stack<Point> path;Point pp ;pp.i = n - 1;pp.j = m - 1;path.push(pp);while (result[pp.i][pp.j].i != -1 && result[pp.i][pp.j].j != -1){path.push(result[pp.i][pp.j]);pp = result[pp.i][pp.j];}int time = 1;pp = path.top();path.pop();while(!path.empty()){cout << time<<"s:("<<pp.i<<","<<pp.j<<")->("<<path.top().i<<","<<path.top().j<<")"<<endl;time ++;if (map[path.top().i][path.top().j] != '.'){int tt = map[path.top().i][path.top().j] - '0';for (int mm = 0; mm < tt; ++ mm){cout <<time<<"s:FIGHT AT ("<<path.top().i<<","<<path.top().j<<")"<<endl;time ++;}}pp = path.top();path.pop();}cout <<"FINISH"<<endl;}}return 0;}
0 0
- 杭电OJ 1026:Ignatius and the Princess I
- 杭电ACM OJ 1026 Ignatius and the Princess I DFS+BFS
- 经典好题!杭电OJ--Ignatius and the Princess I
- 杭电OJ 1029:Ignatius and the Princess IV
- 杭电OJ 1028:Ignatius and the Princess III
- 杭电OJ 1027:Ignatius and the Princess II
- 杭电acm1026 Ignatius and the Princess I
- 【搜索之BFS + 优先队列】杭电 hdu 1026 Ignatius and the Princess I
- 杭电hdu 1026 Ignatius and the Princess I 广度优先搜索
- 杭电1026 Ignatius and the Princess I(BFS+路径记录)
- 杭电-1026Ignatius and the Princess I(BFS+记录路径)
- 杭电1026——Ignatius and the Princess I(BFS)
- HDU杭电1026 Ignatius and the Princess I(迷宫问题bfs)
- 杭电 1026 Ignatius and the Princess I BFS 搜索 JAVA
- 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- HDOJ 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- Android Canvas练习(1)画一张报表来玩
- find函数学习与应用
- [转] AFNetworking、MKNetworkKit和ASIHTTPRequest对比
- 那些年做了一些有的没的的PS
- SQL Server中的存储过程
- 杭电OJ 1026:Ignatius and the Princess I
- 黑马程序员_IOS课程申请
- java基础06
- iOS中实现打电话、发短信
- 清理哲学上的垃圾、雾霾——评陈定学先生的《<矛盾论>的四大缺陷》等文
- 状态模式
- View处理事件
- R语言学习笔记——R语言数据处理基本操作
- js 学习笔记