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 }

更多内容请关注个人微信公众号 物役记 (微信号:materialchains)
作者:雪影蓝枫
本文版权归作者和博客园共有,欢迎转载,未经作者同意须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?