9.1求图的最小生成树
9.1.1图的所有生成树中具有边上的权值之和最小的树称为图的最小生成树。求最小生成树主要有普里姆算法
和克鲁斯卡尔算法。
9.1.2用普里姆算法(Prim)构造最小生成树
普里姆算法是一种`构造性`算法。
基于图的`邻接矩阵`g和起始顶点v实现的。
是一种`贪心算法`。
9.1.3克鲁斯卡尔算法(Kruskal)
克鲁斯卡尔算法是一种按权值的递增次序选择合适的边来构造
最小生成树的方法。
实现克鲁斯卡尔算法的关键是如何判断选取的边是否与生成树中已有的边形成回路,这可以通过并查集来解决。
克鲁斯卡尔是一种贪心算法
9.2求图的最短路径
9.2.1 求一个顶点到其余各顶点的最短路径问题也称为单源最短路径
问题,可以使用狄克斯特拉算法
是一种`贪心算法`。
`不允许边存在负值`。
9.2.2 贝尔曼-福特算法
求解连通带权图中`单源最短路径`的一种算法
允许图中`存在权值为负的边。`
但是不能处理含`负权回路`的图。
`时间复杂度略高`。
为了解决边上带有负值的单源最短路径的问题,该算法从原点逐次绕过其他顶点,通过松弛操作以缩短到达终点最短路径长度的方法。
9.2.3SPFA算法
`单源`最短路径的算法。
仍不能处理`含负权回路`。
图采用`邻接表`存储
通过`松弛操作`进行优化
9.2.4弗洛伊德算法
求图中所有`两个顶点`之间最短路径的问题也称为`多源`最短路径问题
时间复杂度为`O(n^3)`
9.3求解旅行商问题
旅行商问题(TSP),常被称为旅行推销员问题,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。规则虽然简单,但在地点数目增多后求解却极为复杂。
9.3.2采用蛮力法求解TSP问题
邻接矩阵
9.3.3采用动态规划求解TSP问题
动态规划数组dp
9.3.4采用回溯法求解TSP问题
邻接矩阵
9.3.5采用分支限界法求解TSP问题
邻接矩阵
9.3.6采用贪心法求解TSP问题
数组