先是求最小生成树的Prim算法
首先输入两个整数 n 和 m,表示图中的顶点数和边数。接下来一共 m 行,每行三个整数 a,b,c,表示一条连接 a 和 b 的权重为 c 的带权无向边。程序最终会将最小生成树上所有边权之和输出。
比如输入下面这张图:
对应的输入数据为
5 7 0 1 75 0 2 9 1 2 95 1 3 51 2 3 19 2 4 42 3 4 31
1 |
|
再是计算最短路径的Dijkstra算法,Dijkstra 算法和前面的 Prim 算法很相像,都是从一个点开始,每次确定一个点并完成更新,重复操作直至 n 个点都确定为止。
需要注意的是,Dijkstra 不适用于有边权为负数的情况哦,否则会影响算法的正确性。
如果对 Prim 算法的代码还有印象的话,应该可以感觉到,Prim 算法和 Dijkstra 算法极为相似。都会用到一个 visited 数组标记是否已经完成计算,以及一个 dist 数组表示最短路径。不过在 Dijkstra 算法中,dist 存储的就不是到生成树的距离了,而是从源点出发到每个顶点的最短路径。
首先输入两个整数 n 和 m,表示图中的顶点数和边数。接下来一共 m 行,每行三个整数 a,b,c,表示一条连接 a 和 b 的权重为 c 的带权无向边。程序最终会输出从源点出发到所有顶点的最短路径长度。
比如输入下面这张图:
对应的输入数据为
5 8 0 1 10 0 2 5 1 2 3 1 3 1 2 3 9 2 4 2 3 4 6 0 4 8
1 |
|