1、原理:
广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历地结果作为起点,遍历一个距离能访问地所有节点。遍历过的节点不能再次被遍历。
每一层遍历的节点都与根节点的距离相同。设di表示第i个节点与根节点的距离,推导出一个结论,对于先遍历的节点i与后遍历的节点j,有di<=dj。利用这个结论,可以求解最短路径等最优解问题:第一次遍历到目的节点,其所经过的路径为最短路径。
实现BFS:队列(用来存储每一轮遍历得到的节点);标记(对于遍历过的节点,应该将它标记,防止重复遍历)。
2、应用
思路:最常规的BFS
class Solution {
public int shortestPathBinaryMatrix(int[][] grid) {
if(grid[0][0]!=0) return -1;
int[]