HDU 1026 Ignatius and the Princess I
来源:互联网 发布:淘宝开店装修软件 编辑:程序博客网 时间:2024/06/06 17:40
题目大意:从(0, 0),走到(x-1, y-1)所需要的最短时间
(1)'.'为路需要1个单位的时间, 'X'不能走;
(2)为数字表示打怪需要的时间,而走到这一步需要1个单位的时间,所以 使用的时间 = 打怪时间 + 1
思路:
//数据15 6.XX.1...X.2.2...X....XX.XXXXX.
广度优先遍历
由此可以算出最少的时间
又因为每一个点的时间都是由前一个点的时间得到的,所以这一个点有且只有前一个点,记录每一个点的前一个点
#include <iostream>#include <queue>#include <stack>#include <cstdio>using namespace std;#define MAX 500char m[MAX][MAX];int v[MAX][MAX];int x, y, flag;int dx[]={0,0,-1,1};int dy[]={1,-1,0,0};struct Node{int x, y, num;friend bool operator <(Node a, Node b){return a.num > b.num;}};Node pre[MAX][MAX];int main(){ int i, j;Node tmp, s;while (scanf("%d%d", &x, &y)!=EOF){for (i=0; i<x; i++)for (j=0; j<y; j++)cin>>m[i][j];flag = 0;memset(v, 0, sizeof(v)); priority_queue<Node>q;v[0][0] = 1;pre[0][0].x = pre[0][0].y = -1;tmp.x = tmp.y = 0;tmp.num=0;q.push(tmp);while (!q.empty()){tmp = q.top();q.pop();if (tmp.x==x-1 && tmp.y==y-1){printf("It takes %d seconds to reach the target position, let me show you the way.\n", tmp.num);flag = 1;break;}for (i=0; i<4; i++){ s.x = tmp.x + dx[i]; s.y = tmp.y + dy[i]; if (m[s.x][s.y]!='X' && s.x>=0 && s.y>=0 && s.x<x && s.y<y && !v[s.x][s.y]) { if (m[s.x][s.y]=='.') s.num = tmp.num + 1; else s.num = tmp.num + m[s.x][s.y] - '0'+1; pre[s.x][s.y].y = tmp.y; pre[s.x][s.y].x = tmp.x; v[s.x][s.y] = 1; q.push(s); }}}if (flag==1){for (i=0; i<x; i++){for (j=0; j<y; j++)cout<<pre[i][j].x<<" "<<pre[i][j].y<<" ";cout<<endl;} stack<Node>sta; s.x = x-1; s.y = y-1; sta.push(s); while (s.x!=-1||s.y!=-1) { sta.push(pre[s.x][s.y]); int tx = s.x, ty = s.y; s.x = pre[tx][ty].x; s.y = pre[tx][ty].y; } sta.pop(); s = sta.top(); sta.pop(); int time = 1; while (!sta.empty()) { tmp = sta.top(); sta.pop(); if (m[tmp.x][tmp.y]=='.') { printf("%ds:(%d,%d)->(%d,%d)\n", time,s.x, s.y, tmp.x, tmp.y ); time++; } else { printf("%ds:(%d,%d)->(%d,%d)\n", time,s.x, s.y, tmp.x, tmp.y ); time++; for (i=0; i<m[tmp.x][tmp.y]-'0'; i++) { printf("%ds:FIGHT AT (%d,%d)\n", time, tmp.x, tmp.y); time++; } } s.x = tmp.x; s.y = tmp.y; }}elseprintf("God please help our poor hero.\n");printf("FINISH\n");}return 0;}
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
- hdu 1026 Ignatius and the Princess I
- HDU - 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- 读《编写高质量代码改善python的91个建议》笔记 建议7:
- 如何利用EXCEL解析16进制字符串
- java设计模式学习(一):观察者模式(一)
- 戴尔推出人造地球卫星,Ubuntu的开发者的笔记本电脑
- Xcode或者Mac OX S系统下的快捷键
- HDU 1026 Ignatius and the Princess I
- 成长的NFC移动支付和非接触式支付
- boost shared_ptr线程安全性
- 慈善捐赠儿童健康和与教育有效途径来减少贫困
- UPnP协议编程实践(二)
- poj3617题解
- UVA - 11038 How Many O's? (计数)
- 成长Taller-是否有可能
- MySQL-----Char与VARCHAR的区别