zoukankan      html  css  js  c++  java
  • HDU 1010 Tempter of the Bone

    题意:一个n*m的迷宫,从起点到终点,问是否恰能在t个单位时间到达;

    思路:dfs遍历各种可能情况,奇偶剪枝;

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    char mm[55][55];
    int vis[55][55];
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    int n,m,t,s1,s2,e1,e2,flag;
    void dfs(int t1,int t2,int step)
    {
        int i,j,k;
        if(flag) return;
        if(t1==e1&&t2==e2&&step==t)//剩余步数与剩余时间奇偶性相同时,才可能到达
        {
            printf("YES
    ");flag=1;return;
        }
        if((abs(e1-t1)+abs(e2-t2))%2!=(t-step)%2)
        {
            return;
        }
        for(i=0;i<4;i++)
        {
            int xx=t1+dir[i][0];
            int yy=t2+dir[i][1];
            if(xx<0||xx>=n||yy<0||yy>=m||vis[xx][yy]||mm[xx][yy]=='X') continue;
            vis[xx][yy]=1;
            dfs(xx,yy,step+1);
            vis[xx][yy]=0;
        }
    }
    int main()
    {
        int i,j,k,cnt;
        while(scanf("%d%d%d",&n,&m,&t)!=EOF)
        {
            if(n==0&&m==0&&t==0) break;
            memset(mm,0,sizeof(mm));cnt=0;
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    scanf(" %c",&mm[i][j]);
                    if(mm[i][j]=='S')
                    {
                        s1=i,s2=j;
                    }
                    if(mm[i][j]=='D')
                    {
                        e1=i,e2=j;cnt++;
                    }
                    else if(mm[i][j]=='.')
                    {
                        cnt++;
                    }
                }
            }
            memset(vis,0,sizeof(vis));
            vis[s1][s2]=1;//初始时,标记掉起始点,重要!!!
            flag=0;
            if(cnt>=t) dfs(s1,s2,0);//步数能大于时间时,搜索,小剪枝
            if(flag==0) printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    2014--My Plan
    C++操作xls
    fail2ban[防止linux服务器被暴力破解]
    8.1向上转型
    寒假的一个月--实现自己的五部狂奏曲
    浅谈《think in java》:二 一切都是对象
    浅谈《think in java》:一 对象导论总结
    增加Myecllipse内存
    java 容器 集合 用法
    SVN用户切换
  • 原文地址:https://www.cnblogs.com/dashuzhilin/p/4470078.html
Copyright © 2011-2022 走看看