杭电1242 Rescue
2015-07-31 23:39
411 查看
Rescue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20846 Accepted Submission(s): 7446
Problem Description
Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison.
Angel's friends want to save Angel. Their task is: approach Angel. We assume that "approach Angel" is to get to the position where Angel stays. When there's a guard in the grid, we must kill him (or her?) to move into the grid. We assume that we moving up,
down, right, left takes us 1 unit time, and killing a guard takes 1 unit time, too. And we are strong enough to kill all the guards.
You have to calculate the minimal time to approach Angel. (We can move only UP, DOWN, LEFT and RIGHT, to the neighbor grid within bound, of course.)
[align=left]Input[/align]
First line contains two integers stand for N and M.
Then N lines follows, every line has M characters. "." stands for road, "a" stands for Angel, and "r" stands for each of Angel's friend.
Process to the end of the file.
Output
For each test case, your program should output a single integer, standing for the minimal time needed. If such a number does no exist, you should output a line containing "Poor ANGEL has to stay in the prison all his life."
Sample Input
7 8 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........
[align=left]Sample Output[/align]
13 恩,题目大意就是说,a代表要救的人,r代表初始位置,#为墙,x为士兵,可以往四个方向走,每走一步花费一分钟然后遇到士兵并杀死士兵花费2分钟,问救到人最少花费多久时间。广搜,优先队列。[code]#include<stdio.h> #include<string.h> #include<queue> #define INF 0x3f3f3f3f using namespace std; struct node { int x,y,time; friend bool operator < (node a,node b) { return a.time > b.time; } }; int n,m; char map[220][220]; int vis[220][220]; int rec[220][220]; int dir[4][2]={-1,0,1,0,0,-1,0,1}; //int dir[4][2]={-1,0,0,-1,0,1,1,0};看讨论区里说这种方向不过,就试了一下,真的哎,过了呢 int judge(int x,int y) { if(!vis[x][y]&&map[x][y]!='#'&&x>=0&&x<n&&y>=0&&y<m) return 1; return 0; } void bfs(int fx,int fy) { node ss,now,next; ss.x=fx; ss.y=fy; ss.time=0; vis[fx][fy]=1; priority_queue<node>q; q.push(ss); while(!q.empty()) { now=q.top(); q.pop(); if(map[now.x][now.y]=='a') { printf("%d\n",now.time); return ; } for(int i=0;i<4;++i) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; if(judge(next.x,next.y)) { next.time=now.time+1; if(map[next.x][next.y]=='x') next.time++; vis[next.x][next.y]=1; // if(next.time>rec[next.x][next.y]) // continue; // rec[next.x][next.y]=next.time; q.push(next); } } } printf("Poor ANGEL has to stay in the prison all his life.\n"); } int main() { int fx,fy; while(~scanf("%d %d",&n,&m)) { memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); for(int i=0;i<n;++i) scanf("%s",map[i]); for(int i=0;i<n;++i) { for(int j=0;j<n;++j) { rec[i][j]=INF; if(map[i][j]=='r') { fx=i; fy=j; } } } bfs(fx,fy); } return 0; }
[/code]
相关文章推荐
- apue 第14章 高级I/O
- Android BuildConfig使用
- target/action设计模式
- iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)
- Xamarin.Forms 优秀UI界面
- Xcode6 有关Unknown type name ’UIImage‘问题的解决办法
- D - BestCoder Sequence
- android UI设计 layout_weight解析
- hdu 5312 Sequence(数学)
- Can you answer these queries?---hdu4027
- NGUI(三)背包系统页面
- iOS学习(UIImageView)
- ubuntu下vagrant up经常出现Failed to upload a file to the guest VM via SCP due to a permissions error.最终解决
- hdu 5297 Y sequence(容斥)
- 黑马程序员------API(String类,StringBuffer,StringBuilder及基本数据类型包装类)
- Entityframework~Fluent Api配置数据模型与数据库结构关系
- mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误
- 递归和循环---从EasyUI Tree 发现自己的硬伤
- uva11235 Frequent values(线段树区间合并)
- LTView 自定义视图 UIAlertView