模拟队列版本:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int n, m;
typedef pair<int, int> PII;
PII q[N * N]; //定义一个队列, 队列里面的元素表示二维数组里面的点
int g[N][N]; //用二维数组表示地图
int d[N][N]; //d数组里面的下标表二维数组里面的点,值表示每个点的距离
int bfs()
{
int hh = 0, tt = 0; //定义出队头队尾
q[0] = {0, 0};
//初始化d数组,方便后面选择没有走过的点
memset(d, -1, sizeof(d));
d[0][0] = 0; //一开始处于处于原点,设置下标为(0, 0)的点的值为1
//向四个方向延申
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while(hh <= tt)
{
auto t = q[hh++];
for(int i = 0; i < 4; i++