POJ 2488 A Knight's Journey
来源:互联网 发布:php 判断时间大小 编辑:程序博客网 时间:2024/06/17 18:06
POJ 2488 A Knight’s Journey
[★★☆☆☆]搜索 深度优先
题目大意:
给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。
样例
输入:
3
1 1
2 3
4 3
输出:
Scenario #1:
A1Scenario #2:
impossibleScenario #3:
A1B3C1A2B4C2A3B1C3A4B2C4解题思路:
水题,根据字典序dfs就行了。
代码
#include <iostream>#include <algorithm>using namespace std;int h, l;bool used[30][30];struct point{ int x, y;};point ps[30];int ctp;int dfs(int x, int y) { if (x-2 >= 1 && y-1 >= 1 && !used[x-2][y-1]) { used[x-2][y-1] = 1; point tp = {x-2, y-1}; ps[ctp++] = tp; if(dfs(x-2, y-1)) return 1; ctp--; used[x-2][y-1] = 0; } if (x-2 >= 1 && y+1 <= l && !used[x-2][y+1]) { used[x-2][y+1] = 1; point tp = {x-2, y+1}; ps[ctp++] = tp; if(dfs(x-2, y+1)) return 1; ctp--; used[x-2][y+1] = 0; } if (x-1 >= 1 && y-2 >= 1 && !used[x-1][y-2]) { used[x-1][y-2] = 1; point tp = {x-1, y-2}; ps[ctp++] = tp; if(dfs(x-1, y-2)) return 1; ctp--; used[x-1][y-2] = 0; } if (x-1 >= 1 && y+2 <= l && !used[x-1][y+2]) { used[x-1][y+2] = 1; point tp = {x-1, y+2}; ps[ctp++] = tp; if(dfs(x-1, y+2)) return 1; ctp--; used[x-1][y+2] = 0; } if (x+1 <= h && y-2 >= 1 && !used[x+1][y-2]) { used[x+1][y-2] = 1; point tp = {x+1, y-2}; ps[ctp++] = tp; if(dfs(x+1, y-2)) return 1; ctp--; used[x+1][y-2] = 0; } if (x+1 <= h && y+2 <= l && !used[x+1][y+2]) { used[x+1][y+2] = 1; point tp = {x+1, y+2}; ps[ctp++] = tp; if(dfs(x+1, y+2)) return 1; ctp--; used[x+1][y+2] = 0; } if (x+2 <= h && y-1 >= 1 && !used[x+2][y-1]) { used[x+2][y-1] = 1; point tp = {x+2, y-1}; ps[ctp++] = tp; if(dfs(x+2, y-1)) return 1; ctp--; used[x+2][y-1] = 0; } if (x+2 <= h && y+1 <= l && !used[x+2][y+1]) { used[x+2][y+1] = 1; point tp = {x+2, y+1}; ps[ctp++] = tp; if (dfs(x+2, y+1)) return 1; ctp--; used[x+2][y+1] = 0; } if (ctp == l*h) { for (int i = 0; i < ctp; i++) { char c = ps[i].x + 'A' - 1; int d = ps[i].y; cout << c << d; } cout << endl; return 1; } return 0;}int main() { int TT; int ct = 1; cin >> TT; while (TT--) { cin >> l >> h; ctp = 0; for (int i = 0; i < 30; i++) { for (int j = 0; j < 30; j++) { used[i][j] = 0; } } used[1][1] = 1; point tp = {1,1}; ps[ctp++] = tp; cout << "Scenario #" << ct++ << ":" << endl; if(!dfs(1, 1)) cout << "impossible" << endl; cout << endl; } return 0;}
0 0
- POJ 2488 A Knight's Journey
- POJ 2488 A Knight's Journey DFS
- Poj 2488 A Knight's Journey
- POJ 2488 A Knight's Journey (dfs)
- poj 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- POJ-2488-A Knight's Journey
- POJ 2488 A Knight's Journey
- poj 2488 A Knight's Journey
- poj 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- poj 2488 A Knight's Journey
- poj 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- POJ 2488(A Knight's Journey)
- POJ 2488 A Knight's Journey
- POJ-2488-A Knight's Journey
- MYSQL(一)
- 计算机视觉算法开源实现 代码程序 Computer Vision Algorithm Implementations
- svn merge
- JavaScript编写Web脚本最佳实现
- Android通用流行框架大全
- POJ 2488 A Knight's Journey
- 计算机视觉研究 CVonline: The Evolving, Distributed, Non-Proprietary, On-Line Compendium of Computer Vision
- Jquery学习1
- Java EE中Ajax技术简单实现
- IOS 开发 OC(Object_C)与前端页面JS(JavaScript)交互整理(一)
- Android Java对象和底层结构体转换
- ActiveMQ First Demo
- iOS普通字符串和UTF-8之间的相互转换
- 获取iOS app版本信息