hdu 1010

来源:互联网 发布:域名服务器dns 编辑:程序博客网 时间:2024/06/05 04:25

dfs+奇偶剪枝,关键在于奇偶剪枝的应用

#include <iostream>#include <stdio.h>using namespace std;char s[10][10];int vis[10][10];int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int fx,fy;int n,m,t;int flag;void dfs(int sx,int sy,int step){    int i;    if((t-step)%2!=(sx+sy+fx+fy)%2) return;//奇偶性剪枝    if(step==t)    {        if(sx==fx&&sy==fy) flag=1;        return;    }    for(i=0;i<4&&!flag;i++)    {        int tx=sx+d[i][0];        int ty=sy+d[i][1];        if(tx>=0&&tx<n&&ty>=0&&ty<m&&!vis[tx][ty]&&s[tx][ty]!='X')        {            vis[sx][sy]=1;            dfs(tx,ty,step+1);            vis[sx][sy]=0;        }    }}int main(){    while(cin>>n>>m>>t)    {        if(!n&&!m&&!t) break;        int i,j;        int sx,sy;        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                cin>>s[i][j];                if(s[i][j]=='S')                 {                    sx=i;                    sy=j;                }                if(s[i][j]=='D')                {                    fx=i;                    fy=j;                }            }        }        memset(vis,0,sizeof(vis));        flag=0;vis[sx][sy]=1;        dfs(sx,sy,0);        if(flag) printf("YES\n");        else printf("NO\n");    }    return 0;}


原创粉丝点击