广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。
1、二进制矩阵中的最短路径
class Solution {
public:
//保存当前节点的八个方向,进行遍历
vector<vector<int>>dir={
{
0,1},{
0,-1},{
1,0},{
-1,0},{
1,1},{
1,-1},{
-1,1},{
-1,-1}};
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
int n=grid.size();
//base case
if(n==0 || grid[0][0] || grid[n-1][n-1])return -1;
queue<pair<int,int>>q;
q.push(make_pair(0,0));