dijkstra算法代码python

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

dijkstra算法代码python
Dijkstra算法是一种贪心算法,用于计算图中单源最短路径。

该算法基于贪心算法的原则,每次选择一个距离源点最近的顶点,然后更新这个顶点的邻元素的距离。

算法步骤:
1. 初始化距离数组,设置源点的距离为0,其余点的距离为无穷大(表示没有到达该点的路径)。

2. 创建一个空的集合S,用于存放已经求出的最短路径的结点。

3. 循环执行以下步骤,直到所有点都被添加到集合S中:
- 在未确定最短路径的结点中,选择距离源点最近的结点,并将该结点添加到S集合中。

- 更新该结点的邻元素的距离,如果新路径的距离小于目前已知的最短路径,则更新最短路径。

在实现Dijkstra算法时,需要使用图的邻接矩阵或邻接表来表示图。

下面是使用邻接矩阵实现Dijkstra算法的Python代码:
def dijkstra(graph, src):
# 初始化距离数组
dist = [float('inf')] * len(graph)
# 设置源点的距离为0
dist[src] = 0
# 用于存放最短路径的结点
s = []
# 循环执行直到所有点都被添加到集合S中
while len(s) < len(graph):
# 在未确定最短路径的结点中,选择距离源点最近的结点,并将该结点添加到集合S 中
min_dist = float('inf')
min_index = -1
for i in range(len(graph)):
if i not in s and dist[i] < min_dist:
min_dist = dist[i]
min_index = i
s.append(min_index)
return dist
# 示例
graph = [[0, 2, 4, 0, 0],
[2, 0, 1, 3, 0],
[4, 1, 0, 5, 6],
[0, 3, 5, 0, 2],
[0, 0, 6, 2, 0]]
上述代码通过邻接矩阵表示图,其中0表示两点之间没有边,其他数字表示该边的边权。

函数dijkstra接受邻接矩阵graph和源点src作为参数。

函数首先初始化距离数组为无穷大,并设置源点的距离为0。

然后执行循环,每次选择距离源点最近的未确定最短路径的结点,并将该结点添加到集合S中。

接着更新该结点的邻元素的距离,如果新路径的距离小于目前已知的最短路径,则更新最短路径。

最后返回距离数组。

在示例中,当源点为0时,输出的距离数组为[0, 2, 3, 7, 9],表示从源点0到其他点的最短距离。

相关文档
最新文档