poj 2488
2014-03-05 12:08
190 查看
DFS
大致题意:
给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。
经典的“骑士游历”问题,DFS水题一道
解题思路:
难度不大,但要注意的地方有3点:
1、 题目要求以"lexicographically"方式输出,也就是字典序...要以字典序输出路径,那么搜索的方向(我的程序是path()函数)就要以特殊的顺序排列了...这样只要每次从dfs(A,1)开始搜索,第一个成功遍历的路径一定是以字典序排列...
下图是搜索的次序,马的位置为当前位置,序号格为测试下一步的位置的测试先后顺序
按这个顺序测试,那么第一次成功周游的顺序就是字典序
2、国际象棋的棋盘,行为数字p;列为字母q
3、网上有同学说 这道题最后一组数据后是有空行的会PE...,我测试过,不会的,能AC
大致题意:
给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。
经典的“骑士游历”问题,DFS水题一道
解题思路:
难度不大,但要注意的地方有3点:
1、 题目要求以"lexicographically"方式输出,也就是字典序...要以字典序输出路径,那么搜索的方向(我的程序是path()函数)就要以特殊的顺序排列了...这样只要每次从dfs(A,1)开始搜索,第一个成功遍历的路径一定是以字典序排列...
下图是搜索的次序,马的位置为当前位置,序号格为测试下一步的位置的测试先后顺序
按这个顺序测试,那么第一次成功周游的顺序就是字典序
2、国际象棋的棋盘,行为数字p;列为字母q
3、网上有同学说 这道题最后一组数据后是有空行的会PE...,我测试过,不会的,能AC
#include <iostream> #include <string.h> #include <vector> #include <queue> #include <stdio.h> #include <cstdlib> using namespace std; class location { public: int row; char col; }; int p,q;//p是行,q是列 bool chess['Z'+1][27]; int x,y;//返回值 void path(int i,int j,int num)//i,j为当前位置,num为要跳到的位置序号,有8种跳的方式 { switch(num) { case 1: {x=i-1; y=j-2; break;} //按照字典序 case 2: {x=i+1; y=j-2; break;} case 3: {x=i-2; y=j-1; break;} case 4: {x=i+2; y=j-1; break;} case 5: {x=i-2; y=j+1; break;} case 6: {x=i+2; y=j+1; break;} case 7: {x=i-1; y=j+2; break;} case 8: {x=i+1; y=j+2; break;} } return; } bool DFS(location* way,int i,int j,int step) { chess[i][j]=true; way[step].row=i; way[step].col=j; if(step==way[0].row) return true; for(int k=1;k<=8;k++) { path(i,j,k); int ii=x,jj=y; if(!chess[ii][jj]&&ii>=1&&ii<=p&&jj>='A'&&jj<='A'+q-1) if(DFS(way,ii,jj,step+1)) return true; } chess[i][j]=false; return false; } int main() { int test; cin>>test; int t=1; while(t<=test) { memset(chess,false,sizeof(chess)); cin>>p>>q; location* way=new location[p*q+1]; way[0].row=p*q; bool flag=false; if(DFS(way,1,'A',1)) { cout<<"Scenario #"<<t++<<':'<<endl; for(int k=1;k<=way[0].row;k++) cout<<way[k].col<<way[k].row; cout<<endl<<endl; flag=true; continue; } if(!flag) { cout<<"Scenario #"<<t++<<':'<<endl; cout<<"impossible"<<endl<<endl; } } system("pause"); return 0; }
相关文章推荐
- POJ 2488 A Knight's Journey (DFS)
- poj 2488 回溯法
- POJ 2488 A Knight's Journey(dfs + 打印路径)
- A Knight's Journey(POJ_2488)
- POJ 2488 A Knight's Journey
- POJ 2488 A Knight's Journey (DFS + 记录路径)
- POJ 2488 A Knight's Journey (dfs)
- poj2488.特坑的一题
- poj 2488 A Knight's Journey(dfs+记录路径)
- POJ 2488 A Knight's Journey【dfs】
- 【POJ】2488 - A Knight's Journey dfs+回溯
- poj 2488 A Knight's Journey
- poj2488 A Knight's Journey
- !POJ 2488 dfs--按顺序搜索
- poj 2488 A Knight's Journey 回溯
- poj 2488 A Knight's Journey(DFS)
- POJ 2488 A Knight's Journey(DFS+回溯)
- POJ 2488 A Knight's Journey【DFS + 回溯应用】
- poj2488——A Knight's Journey
- POJ-2488 A Knight's Journey dfs搜索