好吧!累死哥了,不是写程序累,而是找错误累,尼玛!一个小小的错误差点让老子抓狂!!!!
找了好长时间啊,好长时间的,你懂的!我整天对着电脑,我容易吗!我的眼睛啊,哥选择了ACM真心对不起你啊!!!!!
啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!
疯了!@!
#include"stdio.h"
#include"string.h"
int v[500][500];
char map[500][500];
int n,m,t,s;
void dfs(int x,int y,int num)
{
if(map[x][y]=='D')
{
if(num==t)
s=num;
return ;
}
if(v[x][y+1]==1)//以下分四步试探!
{
v[x][y+1]=0;
dfs(x,y+1,num+1);
v[x][y+1]=1;
}
if(v[x][y-1]==1)
{
v[x][y-1]=0;
dfs(x,y-1,num+1);
v[x][y-1]=1;
}
if(v[x+1][y]==1)
{
v[x+1][y]=0;
dfs(x+1,y,num+1);
v[x+1][y]=1;
}
if(v[x-1][y]==1)
{
v[x-1][y]=0;
dfs(x-1,y,num+1);
v[x-1][y]=1;
}
}
int main()
{
int sx,sy,dx,dy,i,j,num;
while(scanf("%d%d%d",&n,&m,&t),n+m+t)
{
memset(v,0,sizeof(v));
for(i=1;i<=n;i++)
scanf("%s",map[i]+1);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(map[i][j]=='X')
v[i][j]=0;
else
v[i][j]=1;
if(map[i][j]=='S')
{
sx=i;sy=j;
}
if(map[i][j]=='D')
{
dx=i;dy=j;
}
}
if((t+sx+sy+dx+dy)%2==1)
{
printf("NO\n");
continue;
}
v[sx][sy]=0;//就是这sx,sy,写成了dx,dy,你懂的!
s=num=0;
dfs(sx,sy,num);
if(s==t)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}