poj2488(dfs)A Knight's Journey

http://poj.org/problem?id=2488

小错误不断 数组开的a[8][2] 我居然循环到8 还一直纠结哪错了

改完后 交了一次WA 看了看

讨论里面 要根据字典序 所以移动坐标差a[8][2]只能那么定义 具体看代码

View Code
 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 }
原文地址:https://www.cnblogs.com/shangyu/p/2586981.html