Dijkstra算法是最短路由算法的典型单一来源,该算法用于计算从节点到所有节点的最短路径。主要功能是将其作为中心作为中心扩展到外层,直到其扩展为中心Dijkstra算法的终点是最短道路算法的代表。它在许多专业课程中详细介绍了基本内容,例如数据结构,图形学,操作研究等。注意算法不需要负面的边缘。假设每个边缘E(i)的长度w(i),请找到从顶点V0到每个节点的最短路径。
Dijkstra算法将顶点设置为两组。一组发现最短路径的记录被记录为最终的记录。求解的一组顶点记录为ProcessNodes.0,并且ProcessNodes包含除源节点以外的节点,并初始化了道路的长度。连接到源节点的路径长度的长度是重量,该长度不连接为??..step2:从过程中选择最小的路径长度,最后添加节点和更新procesnodes,并将更新为min(当前权重,当前顶点的最短路径长度+顶点的顶点).STEP3:重复步骤2,直到processnodes数组为空。
这次,我想先描述我的近似思维,然后在下面编写特定的实现。首先,为了方便起见,我使用相邻的表存储结构。相邻表是一个两个维数阵列,具有值存储权重。根据上述工作过程中描述的内容,我们将有两个中间收集记录。最终记录了最终结果。我们只需要在内部填充计算结果。然后删除节点,然后更改节点值后,您需要将堆调整为最小堆。Java随附的优先队列不提供更改节点值的操作。因此,我们需要在这里实现一个小根堆以支持上述操作。然后以常规方式实施Dijkstra算法。
如果您不熟悉这堆,您可以首先查看本文:HEAP(优先级队列),您将不会在此处直接解释,直接发布代码。存储在此堆中的数据格式是INT两个维度阵列,竞标位置和存储节点的相应距离,以及根据存储距离对排序进行排序。
数据结构图节点仅存储节点值,一个节点阵列节点,存储图中的所有节点,两个维度阵列aidjencematrix,存储图中的节点之间的边缘的重量以及线路的竞标和节点和节点的竞标对应于竞标的数组。
初始化图表的值徽标图中的所有节点值,边缘徽标图中,数据格式为(node1,node2的竞标,边框重量)))))
初始化Dijsktra算法的最终鼻子和过程节点的初始化
Dijsktra算法实现
本文使用文章同步助手同步
原始:https://juejin.cn/post/709972179291095053