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 }

 

 

你可能感兴趣的:(poj)