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

    http://acm.hdu.edu.cn/showproblem.php?pid=1010

    奇偶剪枝:
    可以把map看成这样:
    0 1 0 1 0 1
    1 0 1 0 1 0
    0 1 0 1 0 1
    1 0 1 0 1 0
    0 1 0 1 0 1
    从为 0 的格子走一步,必然走向为 1 的格子
    从为 1 的格子走一步,必然走向为 0 的格子
    即:
    0 ->1或1->0 必然是奇数步
    0->0 走1->1 必然是偶数步
    结论:
    所以当遇到从 0 走向 0 但是要求时间是奇数的,或者, 从 1 走向 0 但是要求时间是偶数的 都可以直接判断不可达!

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 #define N 10
     6 
     7 char maps[N][N];
     8 int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
     9 int m, n, t, sx, sy, ex, ey, f;
    10 
    11 void DFS(int x, int y , int d)
    12 {
    13     int i, a, b, p, q;
    14     if(x < 0 || x >= m || y < 0 || y >= n)
    15         return ;
    16     if(x == ex && y == ey && d == t)f = 1;
    17     if(f == 1)
    18         return ;
    19     p = t - d;
    20     q = abs(x - ex) + abs(y - ey);
    21     if(p < q || (p % 2 == 0 && q % 2 != 0) || (p % 2 != 0 && q % 2 == 0))return ;
    22     for(i = 0 ; i < 4 ; i++)
    23     {
    24         a = x + dir[i][0];
    25         b = y + dir[i][1];
    26         if(a >= 0 && a < m && b >= 0 && b < n && maps[a][b] != 'X')
    27         {
    28             maps[a][b] = 'X';
    29             DFS(a, b, d + 1);
    30             maps[a][b] = '.';
    31         }
    32     }
    33     return ;
    34 }
    35 int main()
    36 {
    37     int i, j, wall;
    38     while(scanf("%d%d%d", &m, &n, &t), m != 0 || n != 0 || t != 0)
    39     {
    40         f = wall = 0;
    41         for(i = 0 ; i < m ; i++)
    42         {
    43             scanf(" ");
    44             for(j = 0 ; j < n ; j++)
    45             {
    46                 scanf("%c", &maps[i][j]);
    47                 if(maps[i][j] == 'S')sx = i, sy = j;
    48                 else if(maps[i][j] == 'D')ex = i, ey = j;
    49                 else if(maps[i][j] == 'X')wall++;
    50             }
    51         }
    52         if(m * n - wall < t)
    53         {
    54             printf("NO
    ");
    55             continue;
    56         }
    57         maps[sx][sy] = 'X';
    58         DFS(sx, sy, 0);
    59         if(f == 1)printf("YES
    ");
    60         else printf("NO
    ");
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    laravel在控制器中动态创建数据表
    laravel模型关联:
    laravel的firstOrCreate的作用:先查找表,如果有就输出数据,如果没有就插入数据
    创建一个自定义颜色IRgbColor
    tnt_esri.dat Arcgis8.1安装license
    arcgis desktop 10.1 license manager无法启动问题解决
    解决ArcGIS安装之后出现的Windows installer configures问题
    Arcgis 10.1安装
    Arcgis10安装说明
    ARCGIS9.3安装说明
  • 原文地址:https://www.cnblogs.com/qq2424260747/p/4450115.html
Copyright © 2011-2022 走看看