PKU 2488 TOJ 1702 A Knight's Journey 解题

 

 1#include<stdio.h>
 2#include<string.h>
 3int P[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
 4struct C{int r,l;};
 5C Q[30];
 6char use[30][30];
 7int p,q,K,ans,f;
 8void di(int a,int b)
 9{
10    if(K==ans)f=1;
11    if(f)return;
12    int i,r,l;
13    for(i=0;i<8;i++)
14    {
15        r=a+P[i][0];
16        l=b+P[i][1];
17        if(r>=1 && r<=&& l>=1 && l<=&& use[r][l])
18        {
19            K++;
20            use[r][l]=0;Q[K].l=l;Q[K].r=r;
21            //if(K==ans){f=1;return;}
22            di(r,l);
23            if(f)return;
24            use[r][l]=1;
25            K--;
26        }

27    }

28            
29}

30int main()
31{
32    int i,Kase,l;
33    scanf("%d",&Kase);
34    l=0;
35    while(l<Kase)
36    {
37        memset(use,1,sizeof(use));
38        memset(Q,0,sizeof(Q));
39        scanf("%d%d",&q,&p);
40        ans=p*q;
41        K=1;f=0;
42        Q[K].l=1;Q[K].r=1;
43        use[1][1]=0;
44        di(1,1);
45        printf("Scenario #%d:\n",++l);
46        if(!f)printf("impossible\n\n");
47        else
48        {
49            for(i=1;i<=ans;i++)printf("%c%c",Q[i].r+'A'-1,Q[i].l+'0');
50            printf("\n\n");
51        }

52    }

53    return 0
54
55}

56

深度优先搜索。
因为需要便利整个棋盘有要求遍历的顺序字典序最小。
那么可以确定深搜的顺序就是从A1开始的。
由于p*q<=26当期中一个为2的时候另一个大于10的时候肯定是不能遍历的。
所以不需要考虑B11 B9等一类出现时候字典序的问题了

posted on 2008-07-15 19:31 gong 阅读(274) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(6)

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜