• HDU 1010 深搜+减枝


    HDU 1010

    /*************************************************************************
    	> File Name: HDU1010.cpp
    	> Author:yuan 
    	> Mail: 
    	> Created Time: 2014年11月05日 星期三 22时22分56秒
     ************************************************************************/
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n,m,t,start_x,start_y,door_x,door_y;
    char map[10][10];
    bool ans;
    bool flag[10][10];
    int next[4][2]={1,0,0,1,-1,0,0,-1};
    bool check(int pos_x,int pos_y)
    {
        if(flag[pos_x][pos_y]==0&&pos_x>=0&&pos_x<n&&pos_y>=0&&pos_y<m&&(map[pos_x][pos_y]=='.'||map[pos_x][pos_y]=='D'))
          return 1;
        return 0;
    }
    void dfs(int cur_x,int cur_y,int count)
    {
       // int cur_x=point/m;
        //int cur_y=point%m;
       // printf("cur_x:%d,cur_y:%d
    ",cur_x,cur_y);
    
        if(count>t) return;
        if(ans==1) return;
        if(cur_x==door_x&&cur_y==door_y)
        {
           if(count==t) ans=1;
           // printf("count:%d
    ",count);
            return;
        }
        int temp=(t-count)-abs(door_x-cur_x)-abs(door_y-cur_y);
        if(temp<0||temp&1) return;
        for(int i=0;i<4;i++){
            int pos_x=cur_x+next[i][0];
            int pos_y=cur_y+next[i][1];
            if(check(pos_x,pos_y))
            {
                flag[pos_x][pos_y]=1;
                dfs(pos_x,pos_y,count+1);
                flag[pos_x][pos_y]=0;
            }
        }
    }
    int main()
    {   
       // printf("zhang
    ");
        while(~scanf("%d%d%d",&n,&m,&t)){
           // scanf("%d%d%d",&n,&m,&t);
            if(!n&&!m&&!t) break;
            memset(map,0,sizeof(map));
            memset(flag,0,sizeof(flag));
            ans=0;
            for(int i=0;i<n;i++)
            {
              scanf(" %s",map[i]);  
            }
           // for(int i=0;i<n;i++)
           // printf("%s
    ",map[i]);
            for(int i=0;i<n;i++)
               for(int j=0;j<m;j++)
            {
                if(map[i][j]=='S') start_x=i,start_y=j;
                if(map[i][j]=='D') door_x=i,door_y=j;
            }
           // printf("Start_x:%d,Start_y:%d,door_x:%d,door_y:%d
    ",start_x,start_y,door_x,door_y);
            flag[start_x][start_y]=1;
           // int start_point=start_x*m+start_y;
            dfs(start_x,start_y,0);
            if(ans) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    


  • 相关阅读:
    webpack source map
    webpack 多页面应用打包
    webpack 资源内联
    webpack 移动端 CSSpx 自动转换成 rem
    webpack postcss插件
    css实现banner背景图上文字效果+
    css实现标题下划线效果
    Day 88 Django_DRF 序列化
    Day 87 VUE——xmall_front 案例
    Day 86 VUE——Vuex
  • 原文地址:https://www.cnblogs.com/codeyuan/p/4254407.html
Copyright © 2020-2023  润新知