zoukankan      html  css  js  c++  java
  • TLE: HDOJ 1010 Tempter of the Bone

    超时了,dfs写的是对的(通过了discuss中一块强大的数据)

    谁说TLE的代码没有用?
    # include <stdio.h>
    # include <string.h>
    
    
    typedef struct{
        int x, y;
    }Point;
    
    const Point d[4] = {{-1,0}, {0,1}, {0,-1}, {1,0}};
    
    int N, M, T, tot, ok;
    char m[8][8];
    
    int dfs(Point s, int dir);
    int can_move(Point s, int dir);
    void solve(Point s, Point e, int T);
    
    int main()
    {
        int i;
        char *p;
        Point s, e;
        
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        
        while (1)
        {
            scanf("%d%d%d", &N, &M, &T);
            if (!N && !M && !T) break;
            
            memset(m, 0, sizeof(m));
            
            for ( i = 1; i <= N; ++i)
            {
                scanf("%s", m[i]+1);
                if ((p = strchr(m[i]+1, 'S')) != NULL) {s.x = i; s.y = p-m[i];}
                 if ((p = strchr(m[i]+1, 'D')) != NULL) {e.x = i; e.y = p-m[i];}
               }
               
               solve(s, e, T);
        }
        
        return 0;
    }
    
    
    int dfs(Point s, int dir)
    {
        int ddir, f;
        
        f = 0;
        ++tot;
        s.x = s.x + d[dir].x;
        s.y = s.y + d[dir].y;
        if (m[s.x][s.y] == 'D') f = 1;
        if (tot == T && f) return ok = 1;
        m[s.x][s.y] = 'L';
        for ( ddir = 0; ddir < 4; ++ddir)
        {
             if (ddir != 3-dir && can_move(s, ddir))
                dfs(s, ddir);
        }
        --tot;
        if (!f)m[s.x][s.y] = '.';
        else m[s.x][s.y] = 'D';
    }
    
    int can_move(Point s, int dir)
    {
        Point nx; 
        nx.x = s.x + d[dir].x;
        nx.y = s.y + d[dir].y;
        if (1 <= nx.x && nx.x <= N && 1 <= nx.y && nx.y <= M && (m[nx.x][nx.y] == '.' || m[nx.x][nx.y] == 'D'))
            return 1;       
           return 0;
    }
    
    void solve(Point s, Point e, int T)
    {
        int dir;
        
        if (T >= N*M) {printf("NO\n"); return ;}
        if (m[s.x][s.y] == 'D')
        {
            if (T == 0) printf("YES\n");
            else printf("NO\n");
            return ;
        }
        m[s.x][s.y] = 'L';
        for (ok = dir = 0; dir < 4; ++dir)
        {
               tot = 0;
            if (can_move(s, dir) && !ok)
            {
                dfs(s, dir);
            }
        }
        printf(ok==1 ? "YES\n":"NO\n");
    }
  • 相关阅读:
    php省市联动实现
    json学习笔记
    ajax无刷新技术
    session和cookie
    缩略图,透明度,水印,图片合并
    PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图
    PHP字母数字验证码和中文验证码
    PHP画图的基本步骤GD库
    文件上传和多文件上传
    js身份证验证
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2442083.html
Copyright © 2011-2022 走看看