poj2488-搜索
2013-05-04 21:21
218 查看
判断给定的棋盘,马是否能遍历完所有的点,能遍历完就打印路径,否则输出不可能!
代码:
代码:
#include<stdio.h> #include<string.h> int movex[8]={-2,-2,-1,-1,1,1,2,2}; int movey[8]={-1,1,-2,2,-2,2,-1,1};//这个顺序不能变 int flag;//是否可能的标志量 int a,b;//给定棋盘大小 int pathx[26],pathy[26],vist[26][26]; void dfs(int i,int j,int k) {//i,j表示走的点的坐标,k表示走过点的个数 int x,m,n; if(k==a*b) {//如果恰好 走过所有的点,则输出走过的路径,按字典顺序输出 for(i=0;i<k;i++) printf("%c%d",pathx[i]+'A',pathy[i]+1); printf("\n"); flag=1;//马得遍历成功,标志位1 } else { for(x=0;x<8;x++) { m=i+movex[x]; n=j+movey[x]; if(n>=0&&n<a&&m>=0&&m<b&&!vist[m] &&!flag) { vist[m] =1;//记录不能搜索到本身的点, pathx[k]=m; pathy[k]=n; dfs(m,n,k+1);//走过的点加1 vist[m] =0; } } } } int main() { int n; int m,i,j; scanf("%d",&n); for(m=1;m<=n;m++) { flag=0;// scanf("%d%d",&a,&b); for( i=0;i<a;i++) for(j=0;j<b;j++) vist[i][j]=0; vist[0][0]=1; pathx[0]=0; pathy[0]=0; printf("Scenario #%d:\n",m); dfs(0,0,1); if(!flag) printf("impossible\n"); printf("\n"); } return 0; }
相关文章推荐
- POJ 2488 A Knight's Journey 水搜索
- poj 2488( 搜索 )
- POJ 2488 A Knight's Journey 搜索
- poj 2488 简单的搜索
- poj 2488 搜索
- 搜索 -dfs-POJ-2488-A Knight's Journey
- POJ-2488 A Knight's Journey(需注意搜索顺序的深搜)
- POJ-2488 A Knights Journey-深度优先搜索DFS
- 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 dfs--按顺序搜索
- POJ-2488 A Knight's Journey 解题报告(搜索) 马跳遍棋格的字典序问题
- poj2488 A Knight's Journey 简单DFS 注意搜索步骤
- POJ 2488 Children of the Candy Corn (搜索)
- POJ 2488 A Knight's Journey (dfs+改变搜索顺序)
- poj 1321搜索
- POJ 2599 A funny game(博弈搜索)