zoukankan      html  css  js  c++  java
  • hdu 1010

    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;
    }


  • 相关阅读:
    stl测试
    noip2017逛公园
    比赛
    莫队算法
    noi.ac 第五场第六场
    重排DL
    bzoj2870
    异象石(就是sdio宝藏那题)
    Genius ACM
    模板复习
  • 原文地址:https://www.cnblogs.com/lj030/p/3002263.html
Copyright © 2011-2022 走看看