本题链接:点击打开链接
本题为简单的DFS深搜题,不过还是写了好久,粗心啊。。。
AC代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
char map[10][10];
int mark[10][10];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
int n,m,ti,flag,ex,ey,sx,sy;
void dfs(int x,int y,int t)
{
if(x<0||x>=n||y<0||y>=m)
return ;
if(flag||(t==0&&x==ex&&y==ey))
{
flag=1;
return ;
}
int temp=t-abs(x-ex)-abs(y-ey);
if(temp<0||temp&1)
return ;
map[x][y]='X';
if(map[x+1][y]!='X')
{
dfs(x+1,y,t-1);
if(flag)
return ;
}
if(map[x][y+1]!='X')
{
dfs(x,y+1,t-1);
if(flag)
return ;
}
if(map[x-1][y]!='X')
{
dfs(x-1,y,t-1);
if(flag)
return ;
}
if(map[x][y-1]!='X')
{
dfs(x,y-1,t-1);
if(flag)
return ;
}
map[x][y]='.';
}
int main()
{
int i,j,wall;
while(scanf("%d%d%d",&n,&m,&ti)!=EOF&&(n||m||ti))
{
wall=0;
flag=0;
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
for(j=0;j<m;j++)
{
if(map[i][j]=='S')
{
sx=i;
sy=j;
}
if(map[i][j]=='D')
{
ex=i;
ey=j;
}
if(map[i][j]=='X')
wall++;
}
}
dfs(sx,sy,ti);
if(n*m-wall<=ti)
{
printf("NO\n");
continue;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}