zoj 2110 hdoj 1010 深度遍历+奇偶性剪枝
2012-05-08 00:55
330 查看
题目大意:要你求一个迷宫中,起点s经过给定的步数是否能到终点t,迷宫中有挡板,挡板是不能走的格子
解题思路:很明显的搜索题,用深度优先或宽度优先遍历搜索是否满足,给定步数,也就是求起点根结点到终点最终解的那个搜索树经过的边树
深度优先遍历,要用到奇偶性剪枝,开始不知道啥叫。。。。奇偶性剪枝,
看了这哥们的博客才明白:
详情见:http://www.cppblog.com/Geek/archive/2010/04/26/113615.html
解题思路:很明显的搜索题,用深度优先或宽度优先遍历搜索是否满足,给定步数,也就是求起点根结点到终点最终解的那个搜索树经过的边树
深度优先遍历,要用到奇偶性剪枝,开始不知道啥叫。。。。奇偶性剪枝,
看了这哥们的博客才明白:
详情见:http://www.cppblog.com/Geek/archive/2010/04/26/113615.html
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; struct Point { int x, y; }; const int maxn = 8; char maze[maxn][maxn]; bool map[maxn][maxn]; int n, m, t, step; Point dir[4] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}}; Point s, e; bool dfs(int x, int y); int main() { while(true) { scanf("%d %d %d", &n, &m, &t); if(n == 0 && m == 0 && t == 0) break; memset(map, 0, sizeof(map)); step = 0; for(int i = 0; i < n; i++) { char *p; scanf("%s", maze[i]); if ((p = strchr(maze[i], 'S')) != NULL) { s.x = i; s.y = p - maze[i]; } if ((p = strchr(maze[i], 'D')) != NULL) { e.x = i; e.y = p - maze[i]; } } if(dfs(s.x, s.y)) printf("YES\n"); else printf("NO\n"); } return 0; } bool dfs(int x, int y) { if(step > t) return false; int st = abs(x - y); int ed = abs(e.x - e.y); if(x >= 0 && x < n && y >= 0 && y < m && !map[x][y] && maze[x][y] != 'X' && (t - step - st - ed) % 2 == 0) map[x][y] = true; else return false; if(x == e.x && y == e.y && step == t) return true; for(int i = 0; i < 4; i++) { int dx = x + dir[i].x; int dy = y + dir[i].y; int tmp = step; step++; if(dfs(dx, dy)) return true; step = tmp; } map[x][y] = false; return false; }
相关文章推荐
- zoj 2110 || hdoj 1010 Tempter of the Bone(DFS)
- HDOj 1010 Tempter of the Bone(DFS+奇偶性剪枝)
- zoj 2110 奇偶性剪枝
- zoj 2110(hdu 1010)Tempter of the Bone(深搜)
- hdoj 1312 Red and Black 深度遍历的实现
- HDU 1010 && ZOJ 2110--Tempter of the Bone【DFS && 奇偶剪枝】
- ZOJ 2110 ( HDU 1010 ) Tempter of the Bone( 比较经典的DFS) --from lanshui_Yang
- HDOJ 3460 Ancient Printer (字典树 + 深度遍历)
- HDU 1010 Tempter of the Bone &&ZOJ 2110【DFS】
- ZOJ 2110(HDU 1010) Tempter of the Bone(经典剪枝-奇偶剪枝)
- HDU 1010 ZOJ 2110 Tempter of the Bone (DFS 奇偶剪枝)
- 奇偶剪枝-优化(ZOJ 2110 , HDU 1010)
- hdoj1016(深度遍历)
- zoj 2100(dfs深度优先遍历)
- HDU 1010/ZOJ 2110 Tempter of the Bone(奇偶剪枝)
- ZOJ 3861 Valid Pattern Lock(深度优先遍历dfs,有限制条件的全排列)
- zoj 1004 深度优先遍历
- poj 1198 || zoj 1505 || hdoj 1401 双向宽度遍历
- HDU 1010 && ZOJ 2110 Tempter of the bone (DFS + 奇偶剪枝)
- new hdoj 1010(奇偶性剪枝)