1012 Rescue
2016-04-24 19:02
363 查看
Rescue
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 117 Accepted Submission(s) : 35
[align=left]Problem Description[/align]
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.<br><br>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.<br><br>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.)<br>
[align=left]Input[/align]
First line contains two integers stand for N and M.<br><br>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. <br><br>Process to the end of the
file.<br>
[align=left]Output[/align]
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." <br>
[align=left]Sample Input[/align]
7 8<br>#.#####.<br>#.a#..r.<br>#..#x...<br>..#..#.#<br>#...##..<br>.#......<br>........<br>
[align=left]Sample Output[/align]
13<br>
看到第一眼应该是个广搜题,但我还是用深搜做的,并没有什么技术含量代码:#include<stdio.h>
#include<string.h>
int n,m,ok,ans,vis[205][205];
char mat[205][205];
void dfs(int x,int y,int step)
{
if(vis[x][y] || mat[x][y]=='#' || step>=ans) return;
if(mat[x][y]=='r')
{
ok=1;
if(step<ans) ans=step;
return;
}
if(mat[x][y]=='x')
step++;
vis[x][y]=1;
dfs(x+1,y,step+1);
dfs(x-1,y,step+1);
dfs(x,y+1,step+1);
dfs(x,y-1,step+1);
vis[x][y]=0;
}
int main()
{
while(~scanf("%d %d%*c",&n,&m))
{
memset(mat,'#',sizeof(mat));
int i,j,sti,stj;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
scanf("%c",&mat[i][j]);
if(mat[i][j]=='a')
{
sti=i;
stj=j;
}
}
getchar();
}
ok=0;
ans=100000;
dfs(sti,stj,0);
if(ok) printf("%d\n",ans);
else printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;
相关文章推荐
- 60. Permutation Sequence
- stringbuffer和stringbuilder的区别
- Easyui之datagrid实现点击单元格修改单元格背景颜色
- PHP中include和require
- Leetcode Increasing Triplet Subsequence
- [UIPasteboard generalPasteboard]剪贴板的使用
- AmazeUI 模态框封装
- flex build 4 三个命名空间fx,mx,s
- IOS本地推送通知的一些属性 UILocalNotification
- 软件设计模式——建造者模式(Builder)
- 码农小汪-SQL 图形界面设计约束,unqiue,check Default Foreign
- 利用uitouch简单的实现了微信cell效果
- Restricted Boltzmann Machine(to be continued)
- 51. N-Queens
- easyui里关于datagrid日期不能正常显示
- 【UE4学习】07——设置自己的模板 Converting a Project to a Template
- GUI编程基础
- Easyui datagrid 渲染
- StringBuffer和StringBuilder
- UIView Animation