POJ2488

 1 #include <iostream>
2 using namespace std;
3 int x,y,ROW,COL,path[30];
4 bool vis[26][26],flag;
5 int move[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
6
7 #define SIZE ROW*COL
8
9 void dfs(int r,int c,int dep){
10 path[dep]=r*COL+c;
11 vis[r][c]=true;
12 if(dep==SIZE-1){
13 flag=true;
14 for(int j=0;j<SIZE;j++){
15 printf("%c%d",char('A'+path[j]%COL),path[j]/COL+1);
16 }
17 printf("\n");
18 return;
19 }
20 for(int i=0;i<8;i++){
21 x=r+move[i][0];
22 y=c+move[i][1];
23 if(x>=0&&x<ROW&&y>=0&&y<COL){
24 if(vis[x][y]==false)
25 dfs(x,y,dep+1);
26 if(flag) return; //找到一条路径后,全部回溯直至调用入口
27 }
28 }
29 vis[r][c]=false;
30 return;
31 }
32
33 int main(){
34 int i,t;
35 scanf("%d",&t);
36 for(i=0;i<t;i++){
37 scanf("%d %d",&ROW,&COL);
38 printf("Scenario #%d:\n",i+1);
39 flag=false;
40 memset(vis,false,sizeof(vis));
41 dfs(0,0,0);
42 if(!flag) printf("impossible\n");
43 if(i!=t-1) printf("\n");
44 }
45 return 0;
46 }
原文地址:https://www.cnblogs.com/Seiyagoo/p/2228828.html