hdu1010 深搜

来源:互联网 发布:python可以机器人 编辑:程序博客网 时间:2024/04/27 13:11
#include<cstdio>#include<iostream>#include<cmath>#include<cstring>using namespace std;int n,m,t;int dir[4][2]={-1,0,0,1,1,0,0,-1};int visit[10][10];char map[10][10];int flag;int di,dj,si,sj;void dfs(int a,int b,int dp){     if(map[a][b]=='D'&&dp==t)         {    flag=1;             return;         }     int tmp=t-dp-abs(a-di)-abs(b-dj);//剪枝     if(tmp<0||tmp%2)         return;     for(int i=0;i<4;i++)        {            int ii=a+dir[i][0];            int jj=b+dir[i][1];            if(ii>=0&&ii<n&&jj>=0&&jj<m&&!visit[ii][jj]&&map[ii][jj]!='X'){                   visit[ii][jj]=1;                   dfs(ii,jj,dp+1);                   if(flag==1)                   return;                   visit[ii][jj]=0;            }        }  return;}int main(){    while(cin>>n>>m>>t,n+m+t){        flag=0;        int wall=0;        memset(visit,0,sizeof(visit));        for(int i=0;i<n;i++)          for(int j=0;j<m;j++){             cin>>map[i][j];             if(map[i][j]=='X')                wall++;             if(map[i][j]=='D'){                di=i;                dj=j;             }          }        if(n*m-wall<=t){             cout<<"NO"<<endl;             continue;          }        for(int i=0;i<n;i++)          for(int j=0;j<m;j++)             if(map[i][j]=='S'){                 visit[i][j]=1;                 dfs(i,j,0);                 break;             }        if(flag==0)           cout<<"NO"<<endl;        else            cout<<"YES"<<endl;    }    return 0;}

原创粉丝点击