0
点赞
收藏
分享

微信扫一扫

HDU 1242 Rescue

中间件小哥 2022-08-04 阅读 73


题目地址:​​点击打开链接​​

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

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][n] != '#' && !visit[m][n])
{
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;
}



举报

相关推荐

0 条评论