python实现广度优先算法和深度优先算法

图的概念

图表示的是多点之间的连接关系,由节点和边组成。类型分为有向图,无向图,加权图等,任何问题只要能抽象为图,那么就可以应用相应的图算法。

用字典来表示图

这里我们以有向图举例,有向图的邻居节点是要顺着箭头方向,逆箭头方向的节点不算作邻居节点。
在python中,我们使用字典来表示图,我们将图相邻节点之间的连接转换为字典键值之间的映射关系。比如上图中的1的相邻节点为2和3,即可表示如下:

graph={}
graph[1] = [2,3]

按照这种方式,上图可以完整表示为:

graph={}
graph[1] = [2,3]
graph[2] = [5]
graph[3] = [4,7]
graph[4] = [6]
graph[5] = [6]
graph[6] = [8]
graph[7] = [8]
graph[8] = []

如此我们将所有节点和其相邻节点之间的连接关系全部描述一遍就得到了图的字典表示形式。节点8由于没有相邻节点,我们将其置为空列表。

广度优先算法

图的搜索算法目的是为了解决两个节点之间的最短路径问题,对于加权图则是要找到两节点之间的最小权值总和,因为搜索的目的就是为了尽可能快地找到目标。常用的搜索算法分为广度优先算法和深度优先算法,首先来看广度优先算法。
图的搜索算法落地到代码就是一个对节点的遍历问题,广度和深度的区别在于对节点的遍历顺序不同。广度优先算法的遍历顺序是由近及远,先看到的节点先遍历。
广度优先算法的python实现:
```

猜你喜欢

转载自www.cnblogs.com/Peter2014/p/10682833.html