zoukankan      html  css  js  c++  java
  • HDU 1010(DFS+剪枝)

    一道简单深搜题,重点是如何剪枝,不然会T到怀疑人生........

    题目大意就是问能否恰好在规定的步数一刹那到达规定的地点,由此而进行思考,如果当前位置
    到终点位置,在最理想无障碍地直接到所需要的步数num如果都小于剩余规定能走的步数,那岂
    不适肯定不能到了。反之,则想假如已经在目的地旁边了,但是规定能走的步数还有3步,那我
    只要绕一下,在理想无障碍的条件下不就能到了....因此由此就是对奇偶的判断了:当前位置坐标
    到终点的最短步数一定与题目规定剩余能走的步数,同奇同偶!!!

    AC代码(写的时候思维有点混乱,代码略丑):

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int m,n,step,temp,FF,num,ans,ex,ey,sx,sy;
    char map[10][10];
    int vis[10][10],dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    void dfs(int x,int y,int t)
    {
        /*if(step==t&&!vis[x][y]&&map[x][y]=='D')  FF=1;
        if(FF)  return ;*/
        if(FF==1)  return ;
        if(step==t&&x==ex&&y==ey)  {FF=1;return;}
        int num=abs(x-ex)+abs(y-ey);
        if(num>step-t||(num+step-t)%2!=0)  return ;
        for(int i=0;i<4;i++)
        {
            int nx=x+dir[i][0],ny=y+dir[i][1];
            if(map[nx][ny]!='X'&&!vis[nx][ny]&&nx>=0&&nx<m&&ny>=0&&ny<n)
            {
                vis[nx][ny]=1;
                dfs(nx,ny,t+1);
                vis[nx][ny]=0;  //vital
            }
        }
    }
    int main()
    {
        while(scanf("%d%d%d",&m,&n,&step),m+n+step!=0)
        {
            FF=0,ans=0;
            memset(vis,0,sizeof(vis));
            for(int i=0;i<m;i++)
            {
                scanf("%s",map[i]);
                for(int j=0;j<n;j++)
                {
                    if(map[i][j]=='S')  sx=i,sy=j;
                    if(map[i][j]=='D')  ex=i,ey=j;
                    if(map[i][j]=='X')  ans++;
    
                }
            }
            if(n*m-ans-1<step)  {puts("NO");continue;}
            vis[sx][sy]=1;
            dfs(sx,sy,0);
            if(FF)  puts("YES");
            else  puts("NO");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    设计模式Day02
    OA,ERP等源码一部分演示
    第三方登录
    其实没那么复杂!探究react-native通信机制
    学习面试题(day01)
    学习面试题Day02
    学习面试题Day03
    python 字典排序
    Mac系统下adb工具的配置
    Mac adb 安装
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/7198667.html
Copyright © 2011-2022 走看看