您的位置:首页 > 产品设计 > UI/UE

HDU 1242 Rescue

2015-07-26 21:40 369 查看
题目地址:点击打开链接

思路:从天使搜朋友,得出最短的时间

AC代码:

#include<iostream>
#include<cstring>
using namespace std;
char a[210][210];
int visit[210][210];
int starti,startj,min1,flag;
int x[4] = {-1,1,0,0} ,y[4] = {0,0,-1,1};
void dfs(int i,int j,int len)
{
int k,m,n;
if(len > min1)
return;
if(a[i][j] == 'r' && len < min1)
{
flag = 1;
min1 = len;
return;
}
if(a[i][j] == 'x')
len++;
visit[i][j] = 1;
for(k=0; k<4; k++)
{
m = i + x[k];
n = j + y[k];
if(a[m]
!= '#' && !visit[m]
)
{
dfs(m,n,len+1);
}
}
visit[i][j] = 0;
}
int main()
{
int n,m,i,j;
while(cin>>n>>m)
{
flag = 0;
min1 = 100000000;
memset(a,'#',sizeof(a));//在外面围一层,省的判断
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cin>>a[i][j];
if(a[i][j] == 'a')
{
starti = i;
startj = j;
}
}
}
visit[starti][startj] = 1;
dfs(starti,startj,0);
if(flag)
cout<<min1<<endl;
else
cout<<"Poor ANGEL has to stay in the prison all his life." <<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: