B

ACM小组的Samsara和Staginner对中国象棋特别感兴趣,尤其对马(可能是因为这个棋子的走法比较多吧)的使用进行深入研究。今天他们又在 构思一个古怪的棋局:假如Samsara只有一个马了,而Staginner又只剩下一个将,两个棋子都在棋盘的一边,马不能出这一半棋盘的范围,另外这 一半棋盘的大小很奇特(n行m列)。Samsara想知道他的马最少需要跳几次才能吃掉Staginner的将(我们假定其不会移动)。当然这个光荣的任 务就落在了会编程的你的身上了。

Input

每组数据一行,分别为六个用空格分隔开的正整数n,m,x1,y1,x2,y2分别代表棋盘的大小n,m,以及将的坐标和马的坐标。(1<=x1,x2<=n<=20,1<=y1,y2<=m<=20,将和马的坐标不相同)

Output

输出对应也有若干行,请输出最少的移动步数,如果不能吃掉将则输出“-1”(不包括引号)。

Sample Input

8 8 5 1 4 5

Sample Output

3

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #define ll long long
17 #define inf 0x3fffffff
18 using namespace std;
19 struct Node
20 {
21     int x,y,step;
22 };
23 queue<Node> q;
24 int n,m;
25 int a[25][25];
26 int vis[25][25];
27 int d[][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
28 
29 bool check(int x,int y)
30 {
31     if(x<0||x>=n||y<0||y>=m)
32         return false;
33     if(vis[x][y])
34         return false;
35     return true;
36 }
37 int bfs(int x1,int y1,int x2,int y2)
38 {
39     memset(vis,0,sizeof(vis));
40     q.push( (Node){x1,y1,0} );
41     vis[x1][y1]=1;
42     while(!q.empty())
43     {
44         Node u=q.front();
45         q.pop();
46         if(u.x==x2&&u.y==y2)//到达目标
47         {
48             return u.step;
49         }
50         for(int i=0;i<8;i++)//遍历八个方向
51         {
52              int x=u.x+d[i][0];
53              int y=u.y+d[i][1];
54              if(check(x,y))//检查边界
55              {
56                  vis[x][y]=1;
57                  q.push(Node{x,y,u.step+1});//步数加1
58              }
59         }
60     }
61     return -1;//如果不能吃掉将则输出“-1”
62 }
63 
64 int main()
65 {
66     int x1,y1,x2,y2;
67     while(~scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2))
68     {
69         memset(vis,0,sizeof(vis));
70        int ans= bfs(x2,y2,x1,y1);
71         printf("%d
",ans);
72     }
73     return 0;
74 }
View Code
原文地址:https://www.cnblogs.com/Roni-i/p/7404895.html