poj 2488 A Knight's Journey(dfs)

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

没什么难度,,,就是字典序,要注意一下,一开始没看见。。。唉。。。

View Code
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int a[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
 5 char str[2500];
 6 int are;
 7 int flag;
 8 int m,n;
 9 int map[27][27];
10 void dfs(int i,int j,int depth)
11 {
12     int t;
13     int x,y;
14     if(depth==are)
15     {
16         for(int i=0;i<2*depth;i++)
17         {
18             cout<<str[i];
19         }
20         cout<<endl<<endl;
21         flag=1;
22         return ;
23     }
24     for(t=0;t<8&&flag==0;t++)
25     {
26         x=i+a[t][0];
27         y=j+a[t][1];
28         if(x>=1&&x<=n&&y>=1&&y<=m&&map[x][y]==0)
29         {
30             map[x][y]=1;
31             str[depth*2]=x+'A'-1;
32             str[depth*2+1]=y+'0';
33             dfs(x,y,depth+1);
34             map[x][y]=0;
35         }
36     }
37     return ;
38 }
39 int main()
40 {
41     int t;
42     int k=0;
43     cin>>t;
44     while(t--)
45     {
46         k++;
47         cin>>m>>n;
48         cout<<"Scenario #"<<k<<":"<<endl;
49         flag=0;
50         memset(map,0,sizeof(map));
51         flag=0;
52         are=m*n;
53         map[1][1]=1;
54         str[0]='A';
55         str[1]='1';
56         dfs(1,1,1);
57 
58         if(!flag)
59             cout<<"impossible"<<endl<<endl;
60     }
61 }

 

posted @ 2013-01-22 21:20  琳&leen  阅读(107)  评论(0编辑  收藏  举报