看一下这个图的最小生成树是啥
原图来自书《data structures and algorithm analysis in C》,Mark Allen Weiss, figure 9.48.从v1开始用prim算法生成最小树。
原图中(v1,v4)=1,(v3,v4)=2,用prim算法算最小生成树没问题。但我改成现在这样,如果再用prim算法,算出来的最小生成树形状和原来的一样,但是v1到v4到v3总价值为5,而如果直接从v1到v3,总价值只需要4,但是用prim算法好像算不出来。是我把算法理解错了吗? graph algorithm prim 算法
[解决办法]
你算的是最小生成树不是最短路径。连接v1 v3 v4需要2条边,总和最小的当然还是v1-v4-v3。你如果选了v1-v3,那么为了连接v4你还需要连一条边,总和就要比v1-v4-v3要大了。
[解决办法]
帮FM补充一下,最小生成树求的是 最小代价的前提下使整个图连通,
也就是不一定非要从v1开始,v1到哪里比较近和Prim没有关系。
Prim代码上简单变一下就变成Dijkstra了,楼主对比一下他们的区别就明白了。