通信网最短路径课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书 NO.1
课程设计说明书 NO2
算法具体的形式包括:
确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。
确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。。
图4示出了求图1网中节点1到其他节点最短路径的过程。在表中画圆圈的数字表示该步骤中D (w)的最小值。这样,相应的节点w就加到N中,D(v)的值就按要求更改。因此,在初始化后的第1步,距离最小D(4)=w,节点4就加进集合N中;在第2步,D(5)=2,节点5加进N中;如此不断继续下去。第5步以后,所有的节点都在N中,算法终止。
表1算法的计算过程
步骤N D(2)D(3)D(4)D(5)D(6)
初始{1} 2 5 1 ∞∞
1 {1,4}
2 4 ① 2 ∞
2 {1,4,5} 2
3 1 ② 4
3 {1,2,4,5} ② 3 1 2 4
4 {1,2,3,4,5} 2 ③ 1 2 4
5 {1,2,3,4,5,6} 2 3 1 2 ④
图2.1节点1到其他节点的距离
课程设计说明书 NO.5
图 2.2节点1到其他节点的最短距离
图3.1和图3.2中示出了以源节点1为根的最短距离树。它的产生过程是:当一个节点加入集合N时,它就连接到已在N中的适当点。每个节点下面圆圈内的数字代表在第n步该节点加入树结构。由节点1的最短距离树可以得到节点1的路由选择表,该表指明了到相应的目的的地节点所应选的下一节点。同理,我们可以求得节点2,3,…,6的路由选择表。
3、设计过程与分析
3.1设计内容
根据我们平常在通信网基础的课程中所学的知识,使用Dijkstra算法,设计一个用C语言程序编译的求最短路径的程序。
3.2设计通信网络
根据通信网基础知识,设计一个简单的通信网络。标明各节点间的距离和连接关系。
通信网络共6个节点,为V0-V5,各节点间的距离如图3 所示
图3 一个简单的网络计算机程序输入的各节点间距离的6×6矩阵
V0 V1 V2 V3 V4 V5
V0 0 2 8 6 9 ∞
V1 2 0 3 7 6 4
V2 8 3 0 4 5 10 V3 6 7 4 0 ∞ 8
V4 9 6 5 ∞ 0 ∞
V5 ∞ 4 10 8 ∞ 0 3.3设计程序
以下为用邻接矩阵表示的图的Dijkstra算法的源程序。#define MAX_VERTEX_NUM 100
//最大顶点数
#include
#include
#define MAX_INT 10000
typedef int AdjType;
typedef struct
{
int pi[MAX_VERTEX_NUM];
//存放v到vi的一条最短路径
课程设计说明书 NO.9
Else
{
printf("最短路径为:");
printf("(V%d",i);
while(k!=j)
{
printf(",V%d",k);
k=path[k][j];
}
printf(",V%d)\n",j);
}
printf("\n");
}
}
system("pause");
return 0;
}
3.5设计结果
图 4 程序结果
课程设计说明书 NO.10
图5程序结果
3.3结果分析
由程序结果可得节点间最短距离
图6节点间最短距离
课程设计说明书 NO.11