python算法分析与设计实验:宽度优先查找最短路径
一、实验目的
1、熟悉图的两种常见表示方法,熟练掌握如何在计算机中存储图。了解图在计算机应用领域常见的应用场景。
2、熟练掌握图上宽度优先搜索算法及其算法复杂度分析,了解利用宽度优先搜索解决计算问题的建模过程。
3、熟练掌握图上深度优先搜索算法及其算法复杂度分析,了解深度优先算法的建模过程。
二、实验工具
Win10操作系统、python3.7编译环境、IDLE编译器
三、实验内容
给定无向图G=(V,E),求从源点s到图中各个结点v∈V的最近距离。如图1所示,从源点s到结点d,c和z的最短距离均为2,而到结点f和v的最短距离则为3。
四、实验过程
图的存储依然采用邻接列表的方式存储,通过设计一个Graph类来表示图。Graph类中的成员变量为字典类型变量adj,用于存储图中每一个结点的邻边,成员函数add_edge(u,v)将两个结点u和v建立连接。设计一个BFSResult类来存储BFS的输出结果,一个字典类型的变量level来存储各层结点。level的key对应层的结点,level的value则是层的标号。使用一个字典变量parent来记录结点的父结点。
BFS的实现的函数bfs的输入参数为图G和初始结点s。bfs先初始化输出对象r。变量i索引参数,列表变量frontier存储当前层的结点,列表变量next存储frontier中的所有下一层的结点。
五、实验结果分析
按照BFS遍历该图的过程如下:首先,将初始结点s设置为第0层,然后找出结点s的所有邻居结点,其中还没有被遍历到的结点就将它们作为第1层的结点。再找出第1层的结点的邻居结点,所有未遍历的结点作为第2层的结点。依次遍历完图中所有结点,