Hdu 1242 Rescue
来源:互联网 发布:淘宝上有意思的小东西 编辑:程序博客网 时间:2024/05/21 21:42
有一个关键点没注意到,这个题目求的是最短时间而不是最短距离,杀守卫那个点花2分钟,距离可能最短,但时间不是最优。
另外其实从a搜r或者r搜a没有区别,代码都能过的
所以要用优先队列。又学了一下C++。。。
/*ID: Daniel.20PROG: mainLANG: C++*/#include <algorithm>#include <iostream>#include <sstream>#include <string>#include <queue>#include <list>#include <set>#include <map>#include <cmath>#include <vector>#include <cctype>#include <cstring>#include <fstream>using namespace std;const int maxint=0x7FFFFFFF;const long long maxlonglong=0x7FFFFFFFFFFFFFFFLL; int n,m;char arr[220][220];int sx,sy;int mark[220][220];//int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};struct node{ int x,y,step; friend bool operator < (node a, node b){ return a.step>b.step; }};bool ok(int x, int y){ if(x>=n||x<0||y>=m||y<0) return false; if(arr[x][y]!='r'&&arr[x][y]!='a'&&arr[x][y]!='x'&&arr[x][y]!='.') return false; if(mark[x][y]) return false; return true;}int bfs(){ priority_queue<node> q; node st={sx,sy,0}; q.push(st); while(!q.empty()){ node tmp = q.top(); q.pop(); if(arr[tmp.x][tmp.y]=='r'){ return tmp.step; } for(int i=0;i<4;i++){ int nx=tmp.x+dir[i][0]; int ny=tmp.y+dir[i][1]; if(!ok(nx,ny)) continue; node next={nx,ny,tmp.step+1}; if(arr[nx][ny]=='x') next.step++; mark[nx][ny]=1; q.push(next); } } return -1;}int main(){ while(scanf("%d%d", &n, &m)!=EOF){ for(int i=0;i<n;i++){ scanf("%s", arr[i]); for(int j=0;j<m;j++){ if(arr[i][j]=='a'){ sx=i;sy=j; } } } memset(mark,0,sizeof mark); mark[sx][sy]=1; int result=bfs(); if(result==-1){ cout<<"Poor ANGEL has to stay in the prison all his life."<<endl; }else{ cout<<result<<endl; } } return 0;}
0 0
- hdu 1242 Rescue
- HDU-1242-Rescue
- HDU 1242 Rescue
- HDU-1242 Rescue
- hdu 1242 Rescue
- hdu 1242 Rescue<java>
- hdu 1242 rescue
- HDU-1242:Rescue
- HDU 1242 Rescue
- HDU 1242 Rescue
- hdu 1242 Rescue
- hdu 1242 Rescue
- hdu 1242 Rescue
- hdu 1242 Rescue
- hdu 1242 Rescue
- Rescue hdu 1242
- hdu-1242-Rescue
- Hdu 1242 Rescue
- .NET时间控件用法
- C语言字节对齐
- Win7 关闭任务栏缩略图预览(Taskbar Thumbnails Preview)
- matlab jpg2ppm
- Google Java编程风格指南
- Hdu 1242 Rescue
- 关于输入流状态函数cin.eof()的问题(转)
- Oracle数据库丢失控制文件的恢复四则
- 首次尝试测试驱动开发的体会
- Django1.5的分页中,官方文档的一个小错误
- php和mysql关于时间的实用函数
- Linux mount命令中最基本的几个命令
- mysql存储过程实例
- 一切成功源于积累——20140126 什么是打死也不能交易的仓