69,372
社区成员
发帖
与我相关
我的任务
分享
#include "stdio.h"
#include "string.h"
#define M 1012
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
int BFS (int x,int y);
char map[M][M];
int count,n,m;
int main ()
{
int i,j,k,flag;
int x,y;
char c[M];
while (scanf ("%d %d",&n,&m))
{
if (m == 0&& n == 0)
break;
count = 0;
flag = 0;
getchar ();
for (i = 1;i <= n;i ++)
{
gets(c);
k = 0;
j = 1;
while (c[k] != '\0')
{
map[i][j++] = c[k++];
}
memset (c,'\0',sizeof(c));
}
for (i = 1;i <= n;i ++)
{
for (j = 1;j <= m;j ++)
{
if (map[i][j] == 'X')
{
x = i;
y = j;
flag = 1;
break;
}
}
if (flag) break;
}
if (BFS(x,y) == 1)
{
printf ("You can escaped in %d minute(s).\n",count);
for (i = 1;i <= n;i ++)
{
for (j = 1;j <= m;j ++)
printf ("%c",map[i][j]);
printf ("\n");
}
}
else
printf ("My good friend, may God bless you!\n");
memset (map,'\0',sizeof(map));
printf ("\n");
}
return 0;
}
int BFS (int x,int y)
{
int X,Y,i,flag;
if (x<1||y<1||x>n||y>m)
return 1;
if (map[x][y] == '#')
return 0;
map[x][y] = '*';
flag = 0;
for (i = 0;i < 4;i ++)
{
X = x + dx[i];
Y = y + dy[i];
if (map[X][Y] == '#'||map[X][Y]== '*'||map[X][Y] == 'P') continue;
else if (BFS(X,Y) == 1) flag = 1;
}
if (flag == 0)
map[x][y] = '.';
else
{
map[x][y] = 'w';
count ++;
}
return flag;
}