计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)

这篇具有很好参考价值的文章主要介绍了计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验目的: 运用各种编程语言实现基于 Dijkstra 算法的路由软件。
实验意义: 通过本实验,使学生能够对路由原理和路由算法有进一步的理解和掌握。
实验步骤: 1, 选择合适的编程语言编程实现基于 Dijkstra 算法的路由软件。 输入不同的网络拓扑和链路代价测试和验证自己的路由软件。

实验代码部分如下(python):

def generate_matrix():
    M = 1E100
    matrix = [[0, 2, 8],
              [2, 0, 3],
              [8, 3, 0]]
    return matrix

def dijkstra(matrix, source):
    M = 1E100
    n = len(matrix)
    m = len(matrix[0])
    if source >= n or n != m:
        print('Error!')
        return
    found = [source]        # 已找到最短路径的节点
    cost = [M] * n          # source到已找到最短路径的节点的最短距离
    cost[source] = 0
    path = [[]]*n           # source到其他节点的最短路径
    path[source] = [source]
    while len(found) < n:   # 当已找到最短路径的节点小于n时
        min_value = M+1
        col = -1
        row = -1
        for f in found:     # 以已找到最短路径的节点所在行为搜索对象
            for i in [x for x in range(n) if x not in found]:   # 只搜索没找出最短路径的列
                if matrix[f][i] + cost[f] < min_value:  # 找出最小值
                    min_value = matrix[f][i] + cost[f]  # 在某行找到最小值要加上source到该行的最短路径
                    row = f         # 记录所在行列
                    col = i
        if col == -1 or row == -1:  # 若没找出最小值且节点还未找完,说明图中存在不连通的节点
            break
        found.append(col)           # 在found中添加已找到的节点
        cost[col] = min_value       # source到该节点的最短距离即为min_value
        path[col] = path[row][:]    # 复制source到已找到节点的上一节点的路径
        path[col].append(col)       # 再其后添加已找到节点即为sorcer到该节点的最短路径
    return found, cost, path

def main():
    matrix = generate_matrix()
    found, cost, path = dijkstra(matrix, 0)
    print('found:')
    print(found)
    print('cost:')
    print(cost)
    print('path:')
    for p in path:
        print(p)

if __name__ == '__main__':
    main()

代码说明:
还是编译器的原因,sublime text不支持输入,所以我选择将图的关联矩阵输入到代码中,同时设置不相邻点之间路径长度为一个足够大的数。
初始时,S只包含起点s;U包含除s外的其他顶点,且U中顶点的距离为”起点s到该顶点的距离”。如果不相邻,则取做设定大数。
从U中选出”距离最短的顶点k”,并将顶点k加入到S中;同时,从U中移除顶点k。
更新U中各个顶点到起点s的距离。之所以更新U中顶点的距离,是由于上一步中确定了k是求出最短路径的顶点,从而可以利用k来更新其它顶点的距离;例如,(s,v)的距离可能大于(s,k)+(k,v)的距离。
重复步骤(2)和(3),直到遍历完所有顶点。

程序运行结果:
第一行的found是指每一轮迪杰斯特拉算法找到的当前最近点
第二行的是每一轮对应的路径长度
第三部分是初始点到每一个点的最短路径。

计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)文章来源地址https://www.toymoban.com/news/detail-458268.html

到了这里,关于计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 哈工大计算机网络课程网络安全基本原理之:身份认证

    在日常生活中,在很多场景下我们都需要对当前身份做认证,比如使用密码、人脸识别、指纹识别等,这些都是身份认证的常用方式。本节介绍的身份认证,是在计算机网络安全中的身份认证,从端到端之间通信的角度来看,通信双方的两个实体如何来确认另一方通信实体的

    2024年02月14日
    浏览(29)
  • 云计算:计算机网络基础(第二天课程分享)DNS协议 各协议

    HTTP--tcp 80 ----超文本传输协议    HTTPS---tcp 443 安全传输协议  FTP tcp 20/21 文件传输协议    TFTP udp 69 简单文件传输   Telnet TCP 23 远程登录协议   SSH tcp 22 安全外壳协议 DNS UDP/TCP 53 域名解析协议  DHCP UDP 67/68 动态主机配置协议     传输层协议:TCP/UDP TCP-----传输控制协议----

    2024年02月04日
    浏览(30)
  • 计算机网络课程 day1 基本概念-交换机-路由器 计算机网络的参考模型

    目录 学习计算机网络课程的目标和意义:  计算机网络的基本概念 常用网络设备: network device 交换机:组建局域网使用的,将很多电脑连接起来,组成一个局域网络,可以一起打游戏/上网 路由器:实现跨网段通信使用,把网络里的数据从一个地方转发到另一个地方。可以

    2024年02月13日
    浏览(30)
  • 哈工大计算机网络课程传输层协议之:拥塞控制原理剖析

    哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理 哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:TCP协议 **拥塞(Congestion)** 非正式定义:“太多发送主机发送了太多数据或者发送速度太快

    2024年02月11日
    浏览(28)
  • 哈工大计算机网络课程网络层协议详解之:路由算法概述与链路状态路由算法

    在前面的小节中,我们介绍了网络中路由器的路由与转发等功能。我们说 作为网络层,从功能上来说,核心功能就是要实现路由和转发。 对于转发来说,实际上就是路由器根据存储的转发表,将目的地址转发到对应的输出链路上去。在这个过程中,完成转发的重要依据,就

    2024年02月11日
    浏览(30)
  • 哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

    在互联网中,IP数据报的传输很容易出现差错,当出现差错时,最简单的处理办法就是对该IP数据报进行丢弃。但是,并不是直接丢弃就完了,为了让源主机感知到数据报出现差错,当数据报被丢弃时,IP网络会借助于ICMP协议,向发送数据报的源主机发送一个ICMP差错报文。本

    2024年02月12日
    浏览(34)
  • 哈工大计算机网络课程局域网详解之:无线局域网

    本节介绍一下平时经常使用的一个无线局域网技术,也就是通常我们使用的wifi。 wifi是IEEE 802.11这样一个系列标准所定义的无线局域网。作为802.11局域网来说,实际上存在很多版本: 802.11b 2.4-2.5GHz免费频段(unliebensed spectrum) 最高速率:11Mbps 物理层采用直接序列扩频(DSSS)

    2024年02月15日
    浏览(33)
  • 哈工大计算机网络课程局域网详解之:交换机概念

    在介绍完局域网中最具代表性的以太网技术后,接下来我们继续来看一下在局域网中使用非常广泛也是非常重要的网络设备:交换机。 本节主要面向以太网来介绍其中使用的交换机。 作为以太网交换机来说,是一个典型的数据链路层设备,可以实现对链路层数据帧的存储-转

    2024年02月15日
    浏览(33)
  • 哈工大计算机网络课程网络安全基本原理详解之:消息完整性与数字签名

    这一小节,我们继续介绍网络完全中的另一个重要内容,就是消息完整性,也为后面的数字签名打下基础。 首先来看一下什么是报文完整性。 报文完整性,也称为消息完整性(message integrity),有时也称为报文/消息认证(或报文鉴别),目标: 证明报文确实来自声称的发送

    2024年02月15日
    浏览(28)
  • 哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议

    在上一小节介绍完数据链路层功能和所提供的服务后,接下来我们介绍一个在 数据链路层非常重要的一个协议:多路访问控制MAC协议。 多路访问控制主要是为了解决一类链路的使用问题。作为网路中的链路,大致可以分为以下两类: 点对点链路 顾名思义,链路只连接两个相

    2024年02月15日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包