标签:des style blog http io ar color os sp
4 4 5 S.X. ..X. ..XD .... 3 4 5 S.X. ..X. ...D 0 0 0
NO YES
ans=t-time-abs(dx-x)-abs(dy-y); if(ans<0||ans&1) return;
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
char map[9][9];
int n,m,t,x,dx,y,dy,ok;
int a[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int x,int y,int time)
{
int i,ans;
if(x==dx&&y==dy&&time==t) ok=1;
if(ok) return;
if(x<1||y<1||x>n||y>m) return; //搜索到边界 。
ans=t-time-abs(dx-x)-abs(dy-y); //奇偶剪枝,感觉好吊。
if(ans<0||ans&1) return;
for(i=0;i<4;i++)
{
if(map[x+a[i][0]][y+a[i][1]]!='X')
{
map[x+a[i][0]][y+a[i][1]]='X';
dfs(x+a[i][0],y+a[i][1],time+1);
map[x+a[i][0]][y+a[i][1]]='.';
}
}
}
int main()
{
int i,j,k;
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
getchar(); //注意这个getchar();不能省略,否则输出一直是NO,找了1个多小时,无奈了。
if(n==0&&m==0&&t==0)
break;
for(i=1,k=0;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='S')
{
x=i;
y=j;
}
if(map[i][j]=='D')
{
dx=i;
dy=j;
}
if(map[i][j]=='X')
k++;
}
getchar();
}
if(n*m-k<t) //最长的搜索时间。
printf("NO\n");
else{
ok=0;
map[x][y]='X'; //标记已经访问过了。
dfs(x,y,0);
if(ok==1)
printf("YES\n");
else
printf("NO\n");}
}
return 0;
}Tempter of the Bone(杭电1010)(DFS+奇偶剪枝)
标签:des style blog http io ar color os sp
原文地址:http://blog.csdn.net/hdd871532887/article/details/41889241