最小生成树
Prim算法
设置一个空的集合S,从一个顶点开始,每次找到此结点相邻的最小结点的边,将结点加入集合S,重复以上步骤。
Kruskal算法
按网中权值的大小,从最小的开始,不断选取当前没有选取的,边值中最小的边。直到生成一个树。
最短路径
Dijkstra算法求单源最短路径
1)初始化:集合S初始化为{0},dist[ ]的初始值dist[i]=arcs[0][i],i=1,2,……,n-1.
2)从顶点集合V-S中选出,满足dist[j]=Min{dist[i]|V-S},就是当前求得的一条从出发的最短路径的重点,令S=S{j}。
3)修改从出发到集合V-S上任一顶点可达的最短路径长度:若dist[j]+arcs[j][k]<dist[k],则令dist[k]=dist[j]+arcs[j][k]。
4)重复2)~3)操作共n-1次,直到所有的顶点都包含在S中。
Floyd算法求各顶点之间最短路径问题
建立一个二维数组
初始时,对于任意两个顶点之间,若他们存在路径,用权值表示,否则用表示。
依次的在两点中间加入顶点,如果加入后路径变小了,则更改路径;否则,保持原来的路径。