离散数学实验三 · 最短路径计算

这篇具有很好参考价值的文章主要介绍了离散数学实验三 · 最短路径计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

通过本实验的学习理解Dijkstra算法,并且编码实现最短路径问题。

二、实验内容

Dijkstra算法的理解;

算法概念:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,之后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法结束。),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

三、Python代码部分

import numpy as np

MAX = float('inf')

#输入邻接矩阵
node=eval(input("请输入图像的节点数量:"))
matrix = []
for i in range(0, node):
    temp = []
    temp=input("请输入图像邻接矩阵的第"+str(i+1)+"行(若节点之间没有连接请输入“inf”):").split()
    matrix.append(temp)

#将矩阵的属性转换为整数
matrix_ = np.array(matrix)
matrix_ = matrix_.astype(np.float)

def Dijkstra(matrix, start_node):
    matrix_length = len(matrix_)  # 矩阵一维数组的长度
    access_node = [False] * matrix_length  # 访问过的节点数组
    Excellent = [MAX] * matrix_length  # 最短路径距离数组
    Excellent[start_node] = 0  # 将起始节点的最短路径修改成0

    # 将访问节点中未访问的个数作为循环值
    while access_node.count(False):
        min_value = MAX #节点的暂时最小路径
        min_value_index = -1

        # 获取未循环的最小值下标
        for index in range(matrix_length):
            if not access_node[index] and Excellent[index] < min_value: #如果没有访问过这个节点并且这个节点的最佳路径小于暂时最小路径
                min_value = Excellent[index]    #录入目前路径
                min_value_index = index

        # 将访问节点数组对应的值修改成True
        access_node[min_value_index] = True

        # 更新最短路径距离数组。
        for index in range(matrix_length):
            Excellent[index] = min(Excellent[index], (Excellent[min_value_index] + matrix_[min_value_index][index]))

    return Excellent

ret = Dijkstra(matrix, 0)
ret_ = np.array(ret,dtype=np.int)
for i in range(len(ret)):
    print("从节点0到节点",i,"的最佳路径距离为:",ret_[i])

四、运行结果演示

离散数学最短路径问题,离散数学,算法,图论,python,数据结构

离散数学最短路径问题,离散数学,算法,图论,python,数据结构文章来源地址https://www.toymoban.com/news/detail-777219.html

到了这里,关于离散数学实验三 · 最短路径计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 图论与算法(7)最短路径问题

    图论与算法(7)最短路径问题

    最短路径问题是指在一个加权图中寻找两个顶点之间的最短路径,其中路径的长度由边的权重确定。 常见的最短路径算法包括: Dijkstra算法 :适用于解决单源最短路径问题,即从一个固定的起点到图中所有其他顶点的最短路径。该算法通过不断选择当前路径上权重最小的顶

    2024年02月06日
    浏览(13)
  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(50)
  • OUC离散数学II实验二(Python+Cpp)

    OUC离散数学II实验二(Python+Cpp)

    生成树、环路空间、断集空间的求解 1、掌握无向连通图生成树的求解方法; 2、掌握基本回路系统和环路空间的求解方法; 3、掌握基本割集系统和断集空间的求解方法; 4、了解生成树、环路空间和断集空间的实际应用。 给定一无向简单连通图的相邻矩阵 (例如: )。 1、

    2024年02月03日
    浏览(23)
  • [离散数学]图论

    [离散数学]图论

    点相同 边相同 $$ 必要条件 节点数相同 边相同 度数相同节点数目相同 m = C n 2 = 5 ∗ 4 / 2 = 10 m=C_n^2=5*4/2=10 m = C n 2 ​ = 5 ∗ 4/2 = 10 n = 5 n=5 n = 5 由推论 m ≤ 3 n − 6 le3n-6 ≤ 3 n − 6 得 m ≤ 9 le9 ≤ 9 相互矛盾 ∑ d e g ( v i ) = 2 e = 2 V − 2 sum deg(v_i)=2e =2V -2 ∑ d e g ( v i ​ ) = 2 e =

    2024年02月05日
    浏览(12)
  • 离散数学 图论

    离散数学 图论

    1、V,E是一个图 2、零图:图的边集E为空集 3、平凡图: 只有一个结点 的零图 4、平行边: 5、多重图:有平行边的图 6、简单无向图:一个无向图( 没有平行边 )( 没有自回路 ) 7、简单有向图:一个有向图( 没有平行边 )( 没有自回路 ) 8、简单图:( 没有平行边 )( 没有自回路 )的

    2024年02月08日
    浏览(13)
  • 【离散数学】测试五 图论

    【离散数学】测试五 图论

    目录 图论  系列文章 1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树

    2024年02月09日
    浏览(11)
  • 【离散数学】4. 图论

    【离散数学】4. 图论

    1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 图:点+边+边与点的映射函数 连通性与判别 欧拉图与哈密尔顿图 二分图和平面图与欧拉公式 树及生成树 单源点最短路径:Dijkstra算法 对偶图 4.1.1 图 一个图G是一个三重组 V ( G ) , E ( G ) , Φ G V(G),E(G),Phi_G V ( G ) , E ( G ) , Φ G ​ V(G)是一

    2024年02月10日
    浏览(12)
  • 头歌实训-离散数学-图论!

    头歌实训-离散数学-图论!

    5阶无向完全图的边数为:10 设图 G 有 n 个结点, m 条边,且 G 中每个结点的度数不是 k ,就是 k+1 ,则 G 中度数为 k 的节点数是: n(k+1)-2m 若一个图有5个顶点,8条边,则该图所有顶点的度数和为多少?16 他让输出关联矩阵和邻接矩阵这不简单么? 我是直接摆烂了 输出个球呀

    2024年02月04日
    浏览(41)
  • 离散数学——图论

    离散数学——图论

    图的定义 现实世界中许多现象能用某种图形表示,这种图形是由一些点和一些连接两点间的连线所组成。 例子:a,b,c,d 4个篮球队进行友谊比赛。为了表示4个队之间比赛的情况,我们作出图7.1.1的图形。在图中4个小圆圈分别表示这4个篮球队,称之为 结点 。如果两队

    2024年02月02日
    浏览(14)
  • 离散数学 | 图论 五色定理证明

    离散数学 | 图论 五色定理证明

    看来一下午终于看懂了,甚至差点睡过去…… 趁热打铁记录一下自己的理解。 任意一个简单的连通平面图 点着色 至多 五色 。 一、 设 G 为一个至少有三个结点的连通平面图,则 G 中必有一个结点 u,u 的度数 deg(u)≤5。 Step1:证明简单连通平面图 G 中一定存在一个顶点,其

    2024年02月01日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包