中国象棋的跳马问题(BFS)
题目描述
现在棋盘的大小不一定,由p,q给出,并且在棋盘中将出现障碍物(限制马的行动,与象棋走法相同)
输入
第一行输入n表示有n组测试数据。
每组测试数据第一行输入2个整数p,q,表示棋盘的大小(1<=p,q<=100)。
每组测试数据第二行输入4个整数,表示马的起点位置与终点位置。(位置的取值范围同p,q)
第三行输入m表示图中有多少障碍。
接着跟着m行,表示障碍的坐标。
输出
马从起点走到终点所需的最小步数。
如果马走不到终点,则输入“can not reach!”
样例输入
2
9 10
1 1 2 3
0
9 10
1 1 2 3
8
1 2
2 2
3 3
3 4
1 4
3 2
2 4
1 3
样例输出
1
can not reach!
解题思路:求解最短路线自然想到BFS(),马有八个方向可以进行选择,马的蹩脚有四种选择,那么过滤掉撇脚的情况,并且记录下一点是否已经走过,又或者是否存在障碍物(判重),即可解决问题。
#include <iostream>
#include <cstdio>
#include <set>
#include<cstring>
#include<queue>
const int MaxSize =1000000;
using namespace std;
int P,q;
int vis[104][104];
typedef <