POJ2488 dfs回溯
来源:互联网 发布:淘宝退款对买家的影响 编辑:程序博客网 时间:2024/03/29 21:13
和之前的差不多,这个问题关键是字典序输出,遍历顺序弄好了,第一个扫描成功的就是了。
#include<iostream>using namespace std;const int maxN = 27;struct Node{ char x; int y;};Node answer[maxN];bool check[maxN][maxN];bool flag;int n, p, q;int dx[] = {-2,-2,-1,-1,1,1,2,2};int dy[] = {-1,1,-2,2,-2,2,-1,1};bool jugdeEdge(int x, int y){ return (x < p) && (0 <= x) && (y < q) && (0 <= y) && !(check[x][y]);}void dfs(int x, int y, int steps){ answer[steps].x = x; answer[steps].y = y; check[x][y] = true; if (steps == p * q - 1) { flag = true; return ; } for (int i = 0; i < 8; i++) { int tmpx = x + dx[i]; int tmpy = y + dy[i]; if (jugdeEdge(tmpx,tmpy)) { check[tmpx][tmpy] = true; dfs(tmpx, tmpy, steps + 1); if (flag) { return; } check[tmpx][tmpy] = false; } }}void printResult(int num){ cout << "Scenario #" << num << ":" <<endl; if (!flag ) { cout << "impossible" <<endl; } else { for (int i = 0; i < q * p; i++) { char c = 'A'+answer[i].x; cout << c << answer[i].y + 1; } cout << endl; } cout << endl;}int main(){ cin >> n; for (int k = 0; k < n; k++) { cin >> q >> p; flag = false; memset(answer,0,sizeof(answer)); memset(check, false,sizeof(check)); for (int i = 0; i < p; i++) { for (int j = 0; j < q; j++) { dfs(i,j,0); if (flag) break; } if (flag) break; } printResult(k + 1); }}
0 0
- POJ2488 dfs回溯
- 2011.11.17 poj2488 dfs+回溯法
- POJ2488 【骑士游历】( dfs + 回溯 )
- POJ2488 DFS
- poj2488(dfs)
- POJ2488【DFS】
- poj2488(dfs)
- poj2488(dfs)
- poj2488(回溯板子题)
- poj2488(经典dfs)
- POJ2488 骑士游历(DFS)
- poj2488~dfs基础题
- DFS—poj2488
- POJ2488 -- POJ1154-- DFS
- poj2488 DFS基础
- poj2488 dfs模版
- Knight's Journey(poj2488,dfs)
- POJ2488——简单DFS
- CentOS-minimal 6.5 安装mysql
- spring aop的案例(二)缓存配置
- 异常情况下Activity生命周期分析
- C#: 向Word插入排版精良的Text Box
- AndroidUI-TxetView嵌套Html的使用
- POJ2488 dfs回溯
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- Oracle 组件 系列 小结
- FragmentTransaction管理 Activity中 fragment的替换
- Android VPN 编程
- centOS安装scipy
- yii2发送邮件(配置QQ版本)
- 在一个Hybrid Cloud上部署测试的SharePoint farm
- 一封电气人的情书,理工男竟能写的如此文艺... (hope you understand what I mean)