Advertisement

C++中最短路径采用Dijkstra算法结合邻接矩阵与邻接表进行计算;通过增加边权值用于计算总成本并节点赋予权值代表资源数量;采用Dijkstra与深度优先搜索方法计算最小路径数量及找出所有可能的最优路径

阅读量:

首先需要指出:Dijkstra算法适用于解决不含负权边的图中的单源最短路径问题。(最短路径:无论图是有向还是无向均可适用)
邻接矩阵的初始化操作为:fill(G[0], G[0] + MAXN * MAXN, INF);,这一初始化步骤具有关键作用。
必须确保使用的是maxn乘以maxn的规模,否则可能会存在未覆盖的情况,这里的maxn乘以maxn所表示的是节点的数量。

Dijkstra:s到达每个顶点的最短路径

  • bool set[]:用于标识所有点是否被包含在数组中
    • int dist[]:表示当前找到的到达各点的最短路径长度,作为选择下一个节点的依据
    • int path[]:用于存储每个顶点的前驱节点,通过栈结构逆序输出可得到完整路径,若无前驱节点则标记为-1

上述内容为先前所编写代码的一部分,其中单独将起点进行处理实际上并无必要。可以直接将整个path数组初始化为-1,随后通过n次循环自行寻找路径,这种方式更为直观,也便于观察n次循环的过程

复制代码
    int G[maxn][maxn];
    int n;//点数
    int e;//边数
    /* 求点v 到其他点的最短路径 */
    void Dijkstra(int v, int dist[], int 

全部评论 (0)

还没有任何评论哟~