基本概述
-
应用场景:
(1)分析一下,虽然还是求最短路径,但是是到各个点的最短路径,假如从G点出发,除了能直接到达的:A、B、E、F,如果要到达D点就有两种选择:一是GBD,二是GFD,选择出一条最短路径 -
迪杰斯特拉算法介绍:
-
迪杰斯特拉算法过程:
图解
Python实现
# 迪杰斯特拉算法
class VisitedVertex(object):
def __init__(self, length: int, index: int):
"""
:param length: 表示顶点的个数
:param index: 出发顶点对应的下标,比如G顶点,下标就是6
"""
self.index = index # 传入的顶点序号,打印时需要用到
self.ver = None # 为了便于打印顶点封装一个对象
# 记录各个顶点是否访问过 1表示访问过,0表示未访问过,会动态更新
self.already_array = [0] * length
# 每个下标对应的值为前一个顶点的下标,会动态更新
self.pre_visited = [0] * length
# 记录出发顶点到其他所有顶点的距离,比如G为出发点,就记录G到其他顶点的距离,会动态更新,求的最短距离会存放在dis
# 初始化 dis数组
self.dis = [float('inf')] * length
# 设置出发顶点被访问过为1
self.already_array[index] = 1
# 设置出发顶点的访问距离为0
self.dis[index] = 0
def is_visited(self, index: int):
"""
判断index顶点是否被访问过
:param index: 传入的顶点
:return: 如果访问过,就返回True,否则返回False
"""
return self.already_array[index] == 1
def update_dis(self, index: int, length: int):
"""
更新出发顶点到index顶点的距离
:param index: 传入的index
:param length: 传入的length
:return:
"""
self.dis[index]