网络原理实验报告(Dijkstra)

2026/1/24 4:20:38

网络原理实验报告

——编程实现Dijkstra路由算法

姓名: 班级: 学号: 教师:

1. 实验目的

运用各种编程语言实现基于Dijkstra算法的路由软件。 PS:这里使用的是JAVA语言

2. 实验意义

通过本实验,使学生能够对路由原理和路由算法有进一步的理解和掌握。

3. 实验背景

DIJKSTRA算法描述如下:

设:c(i,j): 结点i至结点j之间链路的代价,若i,j不直接相连,则为无穷大。

D(v): 当前从源结点至目的结点V之间路由的代价。 p(v): 从源结点至目的结点V之间路由中V之前的结点 N: 已经知道最优路径的结点集合 1 Initialization: 2 N = {A} 3 for all nodes v 4 if v adjacent to A 5 then D(v) = c(A,v) 6 else D(v) = infty 7 Loop

8 find w not in N such that D(w) is a minimum 9 add w to N

10 update D(v) for all v adjacent to w and not in N: 11 D(v) = min( D(v), D(w) + c(w,v) )

12 /* new cost to v is either old cost to v or known 13 shortest path cost to w plus cost from w to v */ 14 until all nodes in N

4. 实验步骤

(1) 选择合适的编程语言编程实现基于Dijkstra算法的路

由软件。

(2) 输入不同的网络拓扑和链路代价测试和验证自己的

路由软件。

5. 实验环境

(1) 实验语言:JAVA (2) 实验平台:Eclipse

(3) 引用库函数:随机(Random)库

6. 算法思想理解与描述

在编写代码时,我曾遇到过两个问题也是最容易碰到的难题,这里我介绍一下自己的解决方法:

A. Dijkstra算法究竟是怎样计算最短距离和最短路径的?

也许如果只是要我们写一个算法,求最短路径和最小距离,那么我们可能不同的人有不同的“自然而然”的思路,而且肯定很多并不与Dijkstra算法雷同,但令我们头疼的是:这里是别人写好了一个算法,我们得去理解,而不是让我

们自己去操刀。

在我看来,与其看那些枯燥无味的算法文字叙述还不如看图看表——

我就是看了(中文版)P240的表4-3(它对应着P238的图4-27)才明白是“怎么算的”,这里我就说下自己的理解,也不过就是几句话而已:

1. 一开始,将源节点到各点的直达距离作为最短距离; PS:这里还是要理解表中D()和p()的含义——D()就是刚才说的到目标节点的“目前认为”的最短距离,而p()是“当前认为”的最短路径上到目标节点的前一节点(至少我是这么认为的:如果只求最短距离,p()是不需要的,p()的作用是最后用来“逆推”出最短路径!)

2. 取最小的D()值那个节点,我们“假装”认为它是最短的距离。

PS:这里书上说添到一个新的集合中,其实我觉得为了达到算法目的,不要这个集合也行,只要做到以下两点: (1)下一行选最小D()值时不把之前选过的节点考虑在内

(2)每一行D()的更新只需要做到对剩下每一个D()检查一次更新即可

3. 到新的一行(也就是每次循环)就对剩下(还没有选过的节点)的D()做一个检查更新,方法也很简单:


网络原理实验报告(Dijkstra).doc 将本文的Word文档下载到电脑
搜索更多关于: 网络原理实验报告(Dijkstra) 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219