可以参考玩转算法与数据结构的视频教程和代码
广度优先遍历实际就是用了一个队列,不断弹出父节点加入子节点的过程
可以参考玩转算法与数据结构的视频教程和代码
广度优先遍历的复杂度:O(V + E)
BFS遍历到target就提前退出,这样可以极大地节省递归的成本,当前图的构造就只是为了求解当前两个点的路径
和DFS基本相同
和DFS的基本相同
和DFS的基本相同
实际就是求出了无权图中指定两点的最短路径,还有个小缺点就是只列出了最短路径经过点,而没有列出具体的最短路径的值
代码的图示如下,左侧是DFS的单源路径问题,右侧是BFS的单源路径问题
返回最短路径经过的点和最短路径的值,实际就是加了一个distance数组,记录了BFS过程中经过的点到起点source的距离(无权图默认边长是1,经过一条边加1即可)。测试的Graph就是上面的图
为了方便看,stack和queue添加元素的方法都写成了add,删除元素的方法都写成了remove
下面图的x就是指存储遍历点的容器类型,当是Stack时就是深度优先遍历,当是Queue时就是广度优先遍历,其实也可以是其他的容器类型,比如是个随机弹出的容器类型,那么遍历就相当于是随机遍历了,这个思想在刘老师的《看地见的算法 7个经典应用诠释算法精髓》里有应用到