#include <iostream>
#include <cmath>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
char s[10][10];
int sx,sy,ex,ey,n,m,k;
int Map[10][10];
int flag;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
int cnt;
void dfs(int x,int y,int cnt)
{
int mx,my;
if(x==ex&&y==ey)
{
if(k==cnt)
flag=1;
return;
}
if(cnt>=k)
return;
if(s[x][y]!='X')
{
for(int i=0;i<4;i++)
{
mx=x+dir[i][0];
my=y+dir[i][1];
if(s[mx][my]!='X'&&mx>=1&&mx<=n&&my<=m&&my>=1&&!Map[mx][my])
{
Map[mx][my]=1;
dfs(mx,my,cnt+1);
Map[mx][my]=0;
if(flag)
return;
}
}
}
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&k)&&n&&m&&k)
{
for(int i=1;i<=n;i++)
{
getchar();
for(int j=1;j<=m;j++)
{
scanf("%c",&s[i][j]);
if(s[i][j]=='S')
{
sx=i;
sy=j;
}
if(s[i][j]=='D')
{
ex=i;
ey=j;
}
}
}
getchar();
memset(Map,0,sizeof(Map));
if(abs(sx-ex)+abs(sy-ey)>k||(sx+ex+sy+ey+k)%2==1)
{
printf("NO\n");
continue;
}
Map[sx][sy]=1;
flag=0;
cnt=0;
dfs(sx,sy,cnt);
if(flag==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
打的时候是全局变量的一个小细节错了。
运行时间483ms,
代码借鉴了:http://www.cnblogs.com/ziyi--caolu/archive/2013/02/08/2909325.html