pku 2488 A Knight's Journey DFS
2009-12-06 00:06
211 查看
经典DFS.
#include <iostream> #include <algorithm> #include <vector> using namespace std; int dx[] = {-1, 1, -2, 2, -2, 2, -1, 1}; int dy[] = {-2, -2, -1, -1, 1, 1, 2, 2}; bool visited[9][9]; int path1[64], path2[64]; int width, height; bool bOk; inline bool ok(int x, int y, int dx, int dy) { if(x+dx<1 || x+dx>width || y+dy<1 || y+dy>height) return false; return true; } void dfs(int x, int y, int n) { if(n == width*height-1) { bOk = true; return; } for(int i = 0; !bOk && i < 8; ++i) if(ok(x, y, dx[i], dy[i]) && !visited[x+dx[i]][y+dy[i]]) { visited[x+dx[i]][y+dy[i]] = true; path1 = x+dx[i], path2 = y+dy[i]; dfs(x+dx[i], y+dy[i], n+1); visited[x+dx[i]][y+dy[i]] = false; } } int main() { int cnt; scanf("%d", &cnt); for(int n = 1; n <= cnt; ++n) { scanf("%d%d", &width, &height); printf("Scenario #%d:/n", n); if(width == 1 && height == 1) { printf("A1/n/n"); continue; } memset(visited, 0, sizeof(visited)); memset(path1, 0, sizeof(path1)); memset(path2, 0, sizeof(path2)); bOk = false; visited[1][1] = true; dfs(1, 1, 0); if(bOk) { printf("A1"); for(int i = 0; i < width*height-1; ++i) printf("%c%d", path2[i]+'A'-1, path1[i]); printf("/n/n"); } else printf("impossible/n/n"); } return 0; }
相关文章推荐
- pku 2488 A Knight's Journey (搜索 DFS)
- PKU 2488
- pku 2488 A Knight's Journey
- pku 2488 A Knight's Journey (搜索 DFS)
- PKU 2488 深度优先搜索
- pku2488 A Knight's Journey
- pku2488 dfs
- pku 2488 A Knight's Journey(深搜)
- pku 2488 A Knight's Journey
- 典型地图搜索 pku 2488 A Knight's Journey
- POJ 2488 A Knight's Journey【dfs】
- PKU离散数学
- http://begin.lydsy.com/JudgeOnline/problem.php?id=2770(PKU2503 Babelfish)
- POJ 2488 A Knight's Journey
- pku 1061 - 青蛙的约会
- pku3259 Wormholes
- POJ 2488 A Knight's Journey
- [PKU 3046] Ant Counting (计数DP+差分加数)
- pku 3253 - Fence Repair
- bzoj3212 pku3468 A Simple Problem with Integers