poj 2488A Knight's Journey
1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 26 4 using namespace std; 5 6 int dx[]={-1,1,-2,2,-2,2,-1,1}; 7 int dy[]={-2,-2,-1,-1,1,1,2,2}; 8 int vis[MAXN][MAXN]; 9 int lu[MAXN][MAXN]; 10 int p,q; 11 bool flag; 12 13 void dfs(int i,int j,int step) 14 { 15 int x,y; 16 vis[i][j]=step; 17 if(step==p*q) 18 { 19 flag=true; 20 return ; 21 } 22 for(int m=0; m<8; m++) 23 { 24 x=i+dx[m]; 25 y=j+dy[m]; 26 if((x>=0&&x<p&&y>=0&&y<q)&&!vis[x][y]) 27 { 28 lu[step][0]=x; 29 lu[step][1]=y; 30 dfs(x,y,step+1); 31 if(flag)return; 32 vis[x][y]=0; 33 } 34 } 35 } 36 int main() 37 { 38 int t,tt=0; 39 scanf("%d",&t); 40 while(t--) 41 { 42 tt++; 43 scanf("%d%d",&p,&q); 44 printf("Scenario #%d:\n",tt); 45 for(int i=0; i<p; i++) 46 { 47 for(int j=0; j<q; j++) 48 { 49 int step=1; 50 flag=false; 51 memset(vis,0,sizeof(vis)); 52 memset(lu,0,sizeof(lu)); 53 lu[0][0]=i; 54 lu[0][1]=j; 55 dfs(i,j,step); 56 if(flag) 57 { 58 for(int k=0; k<p*q; k++) 59 printf("%c%d",lu[k][1]+'A',lu[k][0]+1); 60 printf("\n\n"); 61 break; 62 } 63 } 64 if(flag) break; 65 } 66 if(!flag) printf("impossible\n\n"); 67 } 68 return 0; 69 } 70 71