Fork me on GitHub

HDU ACM 1010 Tempter of the Bone(奇偶性剪枝)

Tempter of the Bone

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 51449    Accepted Submission(s): 13838

【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=1010

【随笔】本来不想贴这题上来的,一是想到在这题上学到了新的东西,二是想Mark一下HDU的数据有多水

复制代码
  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 
  5 int dr, dc, blank;
  6 int oddeven[7][7];
  7 
  8 void init()
  9 {
 10     int i, j;
 11     for(i=0; i<7; ++i)
 12     for(j=0; j<7; ++j)
 13     if(i%2) oddeven[i][j] = j%2 ? 0 : 1;
 14     else oddeven[i][j] = j%2 ? 1 : 0;
 15     return;
 16 }
 17 
 18 int Traverse(char (*maze)[7], int row, int column, int cur, int n, int down, int right)
 19 {
 20     if(cur == n && row == dr && column == dc) return 1;
 21     if(blank < n-cur) return 0;
 22     if(column-1>=0 && maze[row][column-1] == '.')
 23     {
 24         maze[row][column-1] = 'X';
 25         blank--;
 26         if(Traverse(maze, row, column-1, cur+1, n, down, right)) return 1;
 27         maze[row][column-1] = '.';
 28         blank++;
 29     }
 30 
 31     if(column+1<right && maze[row][column+1] == '.')
 32     {
 33         maze[row][column+1] = 'X';
 34         blank--;
 35         if(Traverse(maze, row, column+1, cur+1, n, down, right)) return 1;
 36         maze[row][column+1] = '.';
 37         blank++;
 38     }
 39     
 40     if(row-1>=0 && maze[row-1][column] == '.')
 41     {
 42         maze[row-1][column] = 'X';
 43         blank--; 
 44         if(Traverse(maze, row-1, column, cur+1, n, down, right)) return 1;
 45         maze[row-1][column] = '.';
 46         blank++;
 47     }
 48     
 49     if(row+1<down && maze[row+1][column] == '.')
 50     {
 51         maze[row+1][column] = 'X';
 52         blank--;
 53         if(Traverse(maze, row+1, column, cur+1, n, down, right)) return 1;
 54         maze[row+1][column] = '.';
 55         blank++;
 56     }
 57     return 0;
 58 }
 59 
 60 int main()
 61 {
 62 //    freopen("input.txt", "r", stdin);
 63     char maze[7][7];
 64     int n, m, i, j, t, sc, sr;
 65     char input;
 66     init(); 
 67     while(scanf("%d%d%d", &n, &m, &t) != EOF && n+m+t)
 68     {
 69         getchar();
 70         blank = 0;
 71         for(i=0; i<n; ++i)
 72         {
 73             for(j=0; j<m; ++j)
 74             {
 75                 scanf("%c", &maze[i][j]);
 76                 if(maze[i][j] == 'S')
 77                 {
 78                     sr = i;
 79                     sc = j;
 80                     maze[i][j] = 'X';
 81                 }
 82                 else if(maze[i][j] == 'D')
 83                 {
 84                     dr = i;
 85                     dc = j;
 86                     maze[i][j] = '.';
 87                     blank++;
 88                 }
 89                 else if(maze[i][j] == '.') blank++;
 90             }
 91             getchar();    
 92         }
 93         if((oddeven[sr][sc] == oddeven[dr][dc] && t%2) || (oddeven[sr][sc] != oddeven[sr][sc] && !(t%2)))
 94         {
 95             printf("NO\n");
 96         }
 97         else
 98         {
 99             if(Traverse(maze, sr, sc, 0, t, n, m)) printf("YES\n");
100             else printf("NO\n");            
101         }
102     }  
103     return 0;
104 }
复制代码

 

posted @   Gifur  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
TOP
点击右上角即可分享
微信分享提示