假设要在n个城市之间建立通信连落网,则联通n个城市只需要n-1条线路。n个城市之间都可以建立一条线路,最多可能设置n(n-1) / 2条线路,如何在这些可能的线路中选择 n-1 条,使得总的耗费太小?
这个问题就是构造联通网的最小代价生成树的问题;普利姆算法和克鲁斯卡尔算法是利用MST性质构造最小生成树的算法。
普利姆算法直接的理解是:从已经选择的顶点中选择最小的边(边的选择是根据已经选择的顶点决定的);
克鲁斯卡尔算法的理解:从当前网络图每次选择最小的边加入(边的选择是当前网络中的最小边)。
最小生成树要保证整个图的所有路径之和最小;
假设一个乘客要从A城到B城,他希望选择一条途中中转次数最小(或路程花费最少)的路线。这个问题反映到图上就是要找一条从顶点A到B所含边的数目最少的路径。。
单源点的最短路径问题:给定带权有向图G和源点v,求从v 到G中其余各顶点的最短路径,利用迪杰斯特拉算法可以求解。
多源点的最短路径问题:求每一对顶点之间的最短路径,利用弗洛伊德算法可以求解。
最短路径是从一点出发,到达目的地的路径最小。
最小生成树和最短路径的区别:
最小生成树构成后所有的点都被联通,而最短路径只要到达目的地走的是最短路径即可,与所有的点连不连通没有关系。