• hdu 1010(dfs)


    做的非常恶心的一题,一个脑残错找了N久,剪枝后还是那么慢...

    #include<iostream>
    #include<cstdio>
    using namespace std ;
    char str[10][10] ;
    int tur[4][2] = {{-10}, {10}, {0, -1}, {01}} ;
    int e, n, m, t, di, dj ;
    int abs(int a){
        return a<0?-a:a ;
    }
    void dfs(int i, int j, int ct){
        if(i==di&&j==dj&&ct==t)
            e = 1 ;
        if(e)    return ;
        if(i<1||i>n||j<1||j>m)  return ;
        int dis = t-ct - abs(i-di) - abs(j-dj) ;
        if(dis<0||dis&1)    return ;
        for(int k=0; k<4; k++){
            int x = i+tur[k][0] ;
            int y = j+tur[k][1] ;
            if(str[x][y]!='X'){
                str[x][y]='X' ;
                dfs(x, y, ct+1) ;
                str[x][y]='.' ;
            }
        }
        return ;
    }
    int main(){
        while(~scanf("%d%d%d", &n, &m, &t)&&(n+m+t)){
            int wall = 0, si, sj ;
            for(int i=1; i<=n; i++){
                for(int j=1; j<=m; j++){
                    cin >> str[i][j] ;
                    if(str[i][j]=='S')
                        si = i, sj = j ;
                    if(str[i][j]=='D')
                        di = i, dj = j ;
                    if(str[i][j]=='X')
                        wall ++ ;
                }
            }
            if(n*m-wall<t){//能走的位置小于时间
                printf("NO\n") ;
                continue ;
            }
            e = 0 ;
            str[si][sj] = 'X' ;
            dfs(si, sj, 0) ;
            if(e)
                printf("YES\n") ;
            else
                printf("NO\n") ;
        }
        return 0 ;

    } 

  • 相关阅读:
    jquery学习笔记1
    javascript常用函数(1):jquery操作select 基本操作
    Angular.js学习笔记
    Mutex, semaphore, spinlock
    Linq 常用方法解释
    装B必备之 快捷键配置
    HttpWebRequest
    HttpClient get post
    js获取url 参数
    整洁代码1
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2264563.html
Copyright © 2020-2023  润新知