- 图的定义:该程序定义了一个图结构
MGraph
,图是通过邻接链表的方式表示的。每个顶点通过vNode
结构体保存,其中包含顶点的名字(name
)、附加数据(data
),以及指向第一个边节点的指针(firstarc
)。边的信息通过Node
结构体存储,其中index
表示边指向的顶点索引,next
是指向下一条边的指针,distance
表示边的权重(即两顶点之间的距离)。 - 图的初始化:
initG
函数初始化了一个包含 8 个顶点的图。顶点分别命名为 A 到 H。然后,图的边信息使用邻接矩阵edges[8][8]
进行初始化,矩阵的元素代表边的权重(如果没有边,矩阵值为no
,即无穷大)。根据矩阵中的数据,程序遍历并动态地构建邻接链表。
迪杰斯特拉算法思路
- 问题背景:迪杰斯特拉算法用于求解图中单源点到其他所有顶点的最短路径。给定一个图
G
和一个源点(如 A),目标是找出从源点到其他所有顶点的最短路径和路径长度。 - 初始化:首先,定义了一个源点
fd
,并通过遍历图中的顶点名称来找出源点在数组中的索引(即顶点的编号)。接着,初始化一些辅助数组:P[maxv]
:前驱节点数组,用来记录最短路径中每个节点的前驱节点。D[maxv]
:距离数组,用来记录源点到每个顶点的最短距离。初始时,所有顶点的距离设置为无穷大(no
),源点的距离为 0。final[maxv]
:标记数组,用来记录哪些节点已经包含在最短路径集合中。最初,源点被标记为已确定。
- 更新邻接信息&#x