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  
View Code

 

你可能感兴趣的:(poj)