数据结构与算法--迪杰斯特拉算法 Python实现迪杰斯特拉算法 一步一步带你用Python实现迪杰斯特拉算法

基本概述

  • 应用场景:
    在这里插入图片描述
    (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] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值