题意比较简单,就是模仿马在国际象棋棋盘的动作,给出起始点和终点,求最少步数
先用 BFS写了一遍过了,然后看到不少人提到双向BFS ,看了后重新写了一遍
其实双广也并不难,理解了也很容易写出来, 就是起点和终点同时开始搜索,直到发现重合点为止。
对于此题来说,从起点开始搜已被搜索的点vis置为1,从终点开始搜索已被搜索的点vis置为2,
若从起点开始搜遇到vis为2的点,或者从终点开始搜遇到vis为1的点,则说明遇到重合点了,直接返回双向的步数即可。
第一次写,代码估计不怎么好看
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int vis[310][310];
struct node {
int step;
int x,y;
};
int si,sj;
int di,dj;
int n;
int dir[][2]={
{-2,-1},
{-2,1},
{-1,-2},
{-1,2},
{1,-2},
{1,2},
{2,-1},
{2,1}
};
bool isAva(int x,int y) {
i