#include<bits/stdc++.h>
using namespace std;
char Map[10][10];
int N,M,T,di,dj,si,sj,wall;
bool es;
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
void dfs(int si,int sj,int cnt)
{
int i,temp;
if(si>N||sj>M||si<=0||sj<=0) return;
if(cnt==T&&si==di&&sj==dj)es=1;
if(es)return;
temp=(T-cnt)-abs(si-di)-(sj-dj);
if(temp<0||temp%2==1)return;
for(i=0;i<4;i++)
{
if(Map[si+dir[i][0]][sj+dir[i][1]]!='X')
{
Map[si+dir[i][0]][sj+dir[i][1]]='X';//新起点
dfs(si+dir[i][0],sj+dir[i][1],cnt+1);
Map[si+dir[i][0]][sj+dir[i][1]]='.';//回溯
}
}
return;
}
int main()
{
while(scanf("%d %d %d",&N,&M,&T),N)
{
wall=0;//初始化
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
cin>>Map[i][j];
//scanf("%c",&Map[i][j]);
if(Map[i][j]=='S')
{
si=i;sj=j;
}else if(Map[i][j]=='X')
{
wall++;
}else if(Map[i][j]=='D')
{
dj=j;di=i;
}
}
}
if(N*M-wall<=T)
{
printf("NO\n");
continue;
}
es=0;Map[si][sj]='X';//封路
dfs(si,sj,0);
if(es)printf("YES\n");
else printf("NO\n");
}
return 0;
}
总结
1.需要大量输入符号的时候似乎cin比较方便,比较容易AC