杭电 oj Rescue 1242
来源:互联网 发布:9988bi新域名 编辑:程序博客网 时间:2024/06/14 22:58
Rescue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 29830 Accepted Submission(s): 10504
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.)
Input
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…
..#..#.#
#…##..
.#……
……..
Sample Output
13
#include<iostream>#include<algorithm>#include<queue>#include<cstring>#include<cstdio>using namespace std;struct node{ int x,y,time; friend bool operator<(node a1,node a2) { return a1.time>a2.time; }}as,t,h,x1;int i,j,k,n,m;int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};char a[202][202];int b[202][202];void dfs(){ priority_queue<node>q; q.push(h); while(!q.empty()) { t=q.top(); q.pop(); if(a[t.x][t.y]=='r') { cout<<t.time<<endl; return ; } //cout<<t.time<<" "<<t.x<<" "<<t.y<<endl; for(int l=0;l<4;l++) { x1.x=t.x+dir[l][0]; x1.y=t.y+dir[l][1]; if(a[x1.x][x1.y]!='#'&&x1.x>=1&&x1.x<=n&&x1.y>=1&&x1.y<=m&&b[x1.x][x1.y]==0) { if(a[x1.x][x1.y]=='x') x1.time=t.time+2; else x1.time=t.time+1;; b[x1.x][x1.y]=1; q.push(x1); } } } cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;}int main(){ while(cin>>n>>m) { memset(b,0,sizeof(b)); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; if(a[i][j]=='a') { h.x=i; h.y=j; h.time=0; }` } } dfs(); } return 0;}
- 杭电 oj Rescue 1242
- 【杭电oj】1242-Rescue(bfs,优先队列)
- 杭电1242---Rescue
- 杭电1242 rescue
- 杭电1242 Rescue
- 【杭电】[1242]Rescue
- 杭电 HDU 1242 Rescue
- hdu 杭电 1242 Rescue
- 杭电1242Rescue(bfs)
- 杭电1242-Rescue-DFS
- 杭电1242--Rescue--DFS 详解
- 杭电 1242 Rescue(广搜)
- 杭电1242Rescue(深搜)
- 【杭电oj1242】Rescue
- hdu oj 1242 Rescue
- 【搜索之BFS + 优先队列】杭电 hdu 1242 Rescue
- 杭电1242--Rescue--BFS 广度优先算法详解
- 杭电1242Rescue题(bfs+优先队列)
- python 判断网络是否畅通
- Android学习笔记(二十三):GridVeiw的高度设置为屏幕高度的一半
- 向量叉乘
- Linux 常用基本指令
- 数字图像处理之低通滤波器实现原理及方法(Matlab)
- 杭电 oj Rescue 1242
- [牛客]冒泡排序练习题
- js 地区级联信息数据
- 互斥量
- mac OS X配置jdk环境变量
- 设计模式-原型模式
- js数组方法总结归类
- Django URlS路由分发
- windows + anaconda3 安装tensorflow