poj2488--------------深搜(注意字典序)
来源:互联网 发布:c 控制台界面编程 编辑:程序博客网 时间:2024/06/05 18:42
刚开始读题的时候不小心,认为只要深搜就ok了,交了之后一直wa。
看了discuss才知道读题不小心,原来是要按字典序顺序(刚开始有注意到那个陌生单词,不知道什么意思,就忽略了……>_<...没文化真可怕啊)。我把遍历节点的两层循环改为外层循环列,内层循环行,之后提交,依旧wa。
自后才想到对每个位置周围的可走的八个位置搜索是有先后顺序的,应该按照列值由小到大的顺序,改了之后ac了。
#include<stdio.h>int a[30][30];int vis[30][30];int x[30], y[30];int tx[10] = {-1, 1, -2, 2, -2, 2, -1, 1}, ty[10] = {-2, -2, -1, -1, 1, 1, 2, 2};int p, q, tmp;int dfs(int i, int j, int step){ x[step] = i; y[step] = j; vis[i][j] = 1; if(step == p*q) return 1; int px, py; for(int k=0; k<8; k++) { px = i + tx[k]; py = j + ty[k]; if(!vis[px][py] && px>=0 && px<p && py>=0 && py<q) if(dfs(px, py, step+1)) return 1; } vis[i][j] = 0; return 0;}int solve(){ for(int k=0; k<30; k++) { for(int l=0; l<30; l++) { vis[k][l] = 0; } } for(int j=0; j<q; j++) { for(int i=0; i<p; i++) { if(dfs(i, j, 1)) { return 1; } } } return 0;}int main(){ int n; scanf("%d", &n); for(int t=1; t<=n; t++) { scanf("%d %d", &p, &q); int r = solve(); printf("Scenario #%d:\n", t); if(r) { for(int i=1; i<=p*q; i++) { printf("%c%d", 'A'+y[i], x[i]+1); } } else { printf("impossible"); } printf("\n\n"); } return 0;}
- poj2488--------------深搜(注意字典序)
- poj2488 回溯 注意字典 边缘的处理思想
- POJ2488 A Knight's Journey(深搜DFS,字典序,骑士游历问题)
- POJ2488(A Knight's Journey)(DFS+按字典序输出)
- poj2488 骑士周游(深搜)
- POJ2488==DFS+路径输出+字典序排列
- Poj2488【深搜】
- poj2488
- POJ2488
- poj2488
- poj2488
- poj2488
- poj2488
- poj2488
- poj2488
- poj2488
- poj2488
- poj2488
- .net开发利器
- Android开发学习笔记 via Google Developers (5) - Interaction of activities
- header("Location:login.php")应该注意的几个问题
- WPF 多线程编程
- sharepoint 2010 通知 的设置
- poj2488--------------深搜(注意字典序)
- spring acegi 中文手册
- Android学习之ProgressDialog
- Java中的 分号 ;
- linux内核模块学习hellomod
- 红黑树讲解和代码
- $(function(){...});
- java 打印日志
- android 中管理短信