http://poj.org/problem?id=2488
小错误不断 数组开的a[8][2] 我居然循环到8 还一直纠结哪错了
改完后 交了一次WA 看了看
讨论里面 要根据字典序 所以移动坐标差a[8][2]只能那么定义 具体看代码
1 #include <stdio.h> 2 #include <string.h> 3 int n,m,x[27][27],q[27],flag; 4 char w[27]; 5 int u[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; 6 int legal(int a,int b) 7 { 8 if(a>m||a<1||b<1||b>n) 9 return 0; 10 return 1; 11 } 12 void dfs(int i, int j,int v) 13 { 14 int s,d,xp,yp; 15 q[v] = j; 16 w[v] = i+'A'-1; 17 if(flag == 1) 18 return; 19 if(v == n*m) 20 { 21 flag = 1; 22 for(s = 1 ; s <= n*m ; s++) 23 printf("%c%d",w[s],q[s]); 24 puts(""); 25 } 26 else 27 { 28 for(d = 0 ; d <= 7 ; d++) 29 { 30 xp = i+u[d][0]; 31 yp = j+u[d][1]; 32 if(legal(xp,yp)&&x[xp][yp] == 0) 33 { 34 x[xp][yp] = 1; 35 dfs(xp,yp,v+1); 36 x[xp][yp] = 0; 37 } 38 } 39 } 40 } 41 int main() 42 { 43 int i,t,j,k = 0; 44 scanf("%d", &t); 45 while(t--) 46 { 47 k++; 48 memset(x,0,sizeof(x)); 49 flag = 0; 50 scanf("%d%d",&n, &m); 51 printf("Scenario #%d:\n",k); 52 for(i = 1; i <= m; i++) 53 for(j = 1 ; j <= n ; j++) 54 { 55 x[i][j] = 1; 56 dfs(i,j,1); 57 x[i][j] = 0; 58 } 59 if(flag == 0) 60 printf("impossible\n"); 61 if(t!=0) 62 puts(""); 63 } 64 return 0; 65 }