POJ 2488 A Knight's Journey-dfs

Posted ljhaha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2488 A Knight's Journey-dfs相关的知识,希望对你有一定的参考价值。

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

技术分享图片技术分享图片技术分享图片

题目解读:首先得弄清楚国际象棋中关于“马走日”的规则,如上图中的马,它的下一步的走法有8中,所以对每一个位置的马,它所能走的8个方向坐标设置为

dir[8][2]= {{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};

对于最后一组测试案例4 3

画出图解如下:

技术分享图片

解题代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 int vis[100][100];
 7 int p,q,flag;
 8 int dir[8][2]= {{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
 9 struct node{
10     int x,y;
11 }a[100];
12 void dfs(int x,int y,int step)
13 {
14     a[step].x=x; a[step].y=y;
15     if(step==p*q){
16         for(int i=1;i<=step;i++)
17             printf("%c%d",a[i].y-1+A,a[i].x);
18         printf("
");
19         flag=1;
20     }
21     if(flag) return;
22     for(int i=0;i<8;i++){
23         int xx=x+dir[i][0];
24         int yy=y+dir[i][1];
25         if(xx>0&&xx<=p &&yy>0&&yy<=q && vis[xx][yy]==0){
26             vis[xx][yy]=1;
27             dfs(xx,yy,step+1);
28             vis[xx][yy]=0;
29         }
30     }
31 }
32 int main()
33 {
34     int T,cnt=1;scanf("%d",&T);
35     while(T--){
36         flag=0;
37         memset(vis,0,sizeof(vis));
38         scanf("%d%d",&p,&q);
39         printf("Scenario #%d:
",cnt++);
40         vis[1][1]=1;
41         dfs(1,1,1);
42         if(flag==0)
43             printf("impossible
");
44         printf("
");
45     }
46     return 0;
47 }

以上是关于POJ 2488 A Knight's Journey-dfs的主要内容,如果未能解决你的问题,请参考以下文章

A Knight's Journey POJ - 2488

POJ 2488-A Knight&#39;s Journey(DFS)

POJ 2488 A Knight's Journey

poj-2488 a knight's journey(搜索题)

POJ 2488:A Knight&#39;s Journey

POJ 2488:A Knight&#39;s Journey