#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
int N,M,T,flag,a,b,c,d;
int xx[4]={0,0,1,-1};
int yy[4]={1,-1,0,0};
char map[30][30];
int fun(int x,int y)
{
if(x<0||y<0||x>=N||y>=M)
return 0;
return 1;
}
void DFS(int x,int y,int t)
{
int x1,y1,i,j;
if(flag)
return ;
if(x==c&&y==d&&t==T)
{
flag=1;
return ;
}
if(t>T)
return;
if((abs(c-x)+abs(d-y))%2!=(T-t)%2)
return ;
for(i=0;i<4;i++)
{
x1=x+xx[i];
y1=y+yy[i];
if(fun(x1,y1)&&map[x1][y1]!='X')
{
map[x1][y1]='X';
DFS(x1,y1,t+1);
map[x1][y1]='.';
}
}
}
int main( )
{
while(scanf("%d%d%d",&N,&M,&T),N||M||T)
{
flag=0;
int i,j,num=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
cin>>map[i][j];
if(map[i][j]=='S')
{
a=i;
b=j;
}
else if(map[i][j]=='D')
{
c=i;
d=j;
}
}
map[a][b]='X';
DFS(a,b,0);
if(!flag)
puts("NO");
else
printf("YES\n");
}
return 0;
}
刚开始的时侯没有奇偶剪枝,超时。。。。。。
转载于:https://www.cnblogs.com/tangcong/archive/2011/05/11/2042889.html