poj2488
2011-06-06 01:23
183 查看
http://poj.org/problem?id=2488
问从8*8的矩阵上某一点,以某一方向两格,而另一个方向一格的方式前进,出发能否遍历整个矩阵,若能则输出遍历的路线。
采用深搜遍历,但要注意此题有一个隐性要求遍历路线要字典序最小。
问从8*8的矩阵上某一点,以某一方向两格,而另一个方向一格的方式前进,出发能否遍历整个矩阵,若能则输出遍历的路线。
采用深搜遍历,但要注意此题有一个隐性要求遍历路线要字典序最小。
#include<stdio.h> int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1}; /*注意此处的数组数据, 为了保证每次的探索都是 符合字典序的*/ int g,a,b; int vist[26][26],path[26][2]; void find(int i,int j,int k) { if(k==a*b) { for(int i=0;i<k;i++) printf("%c%d",path[i][0]+'A',path[i][1]+1); printf("\n"); g=1; } else for(int x=0;x<8;x++) { int n=i+dir[x][0]; int m=j+dir[x][1]; if(n>=0&&n<b&&m>=0&&m<a&&!vist [m]&&!g) { vist [m]=1; path[k][0]=n,path[k][1]=m; find(n,m,k+1); vist [m]=0; } } } int main() { int n; scanf("%d",&n); for(int m=0;m<n;m++) { g=0; scanf("%d %d",&a,&b); for(int i=0;i<a;i++) for(int j=0;j<b;j++) vist[i][j]=0; vist[0][0]=1; path[0][0]=0,path[0][1]=0; printf("Scenario #%d:\n",m+1); find(0,0,1); if(!g) printf("impossible\n"); printf("\n"); } return 0; }
相关文章推荐
- poj 2488 A Knight's Journey
- poj2488骑士之旅
- poj 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- POJ——2488(深度搜索)
- POJ 2488 A Knight's Journey
- poj 2488(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(dfs)
- POJ 2488 A Knight's Journey
- poj 2488
- POJ 2488 A Knight's Journey
- POJ 2488 A Knight's Journey
- poj2488--------------深搜(注意字典序)
- [ACM] POJ 2488 A Knight's Journey
- A Knight's Journey(POJ--2488
- POJ 2488 A Knight's Journey(经典DFS)
- poj 2488