题意:狗狗在S位置,门在D位置,让狗狗走到门那里要刚好用时T秒
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int vis[10][10];
char map[10][10];
int n, m, t, i, j;
int si, sj, ei, ej;
bool flag;
int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int x, int y, int cnt)
{
int temp, i;
if(x>n||y>m||x<=0||y<=0) return;
if(x==ei&&y==ej&&cnt==t)
{
flag=1;
return;
}
temp=t-cnt-abs(x-ei)-abs(y-ej);//剪枝
if(temp<0||temp%2) return;
for(i=0; i<4; i++)
{
if(map[x+dis[i][0]][y+dis[i][1]]!='X')
{
map[x+dis[i][0]][y+dis[i][1]]='X';
dfs(x+dis[i][0], y+dis[i][1], cnt+1);
if(flag) return ;
map[x+dis[i][0]][y+dis[i][1]]='.';
}
}
}
int main()
{
while(scanf("%d%d%d", &n,&m,&t)&&n&&m&&t)
{
getchar();
flag=0;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
scanf("%c", &map[i][j]);
if(map[i][j]=='S')
{
map[i][j]='X';
si=i, sj=j;
}
if(map[i][j]=='D')
ei=i,ej=j;
}
getchar();
}
dfs(si, sj, 0);
if(flag) puts("YES");
else puts("NO");
}
return 0;
}