POJ--2488

原题链接:http://poj.org/problem?id=2488

分析:如果存在合法路径,那么一定可以将路径的起始点定为(A,1),从该点按字典序DFS,如果找到一条路径,那么这条路即为所求。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #define maxn 27
 6 using namespace std;
 7 int dirx[8]={-2,-2,-1,-1,1,1,2,2};
 8 int diry[8]={-1,1,-2,2,-2,2,-1,1};
 9 char path[maxn<<1];
10 int p,q,tot;
11 bool visit[maxn][maxn],flag;
12 void print()
13 {
14     for(int i=0;i<2*tot;i++)
15     printf("%c",path[i]);
16     printf("\n");
17 }
18 void dfs(int num,int x,int y)
19 {
20     if(num==tot){
21         print();
22         flag=true;
23         return;
24     }
25     for(int i=0;i<8&&!flag;i++){
26         int nx=x+dirx[i];
27         int ny=y+diry[i];
28         if(nx>0&&ny>0&&nx<=q&&ny<=p&&!visit[nx][ny]){
29             visit[nx][ny]=true;
30             path[num<<1]=nx+'A'-1;
31             path[num<<1|1]=ny+'1'-1;
32             dfs(num+1,nx,ny);
33             visit[nx][ny]=false;
34         }
35     }
36 }
37 int main()
38 {
39     int T,cas=1;
40     scanf("%d",&T);
41     while(T--)
42     {
43         scanf("%d%d",&p,&q);
44         memset(visit,false,sizeof(visit));
45         tot=p*q;flag=false;
46         path[0]='A';path[1]='1';
47         printf("Scenario #%d:\n",cas++);
48         visit[1][1]=true;
49         dfs(1,1,1);
50           if(!flag)printf("impossible\n");
51           if(T)puts("");
52     }
53     return 0;
54 }
View Code

 

posted @ 2013-08-09 19:22  EtheGreat  阅读(222)  评论(0编辑  收藏  举报