基础
最小生成树:
用权值和最小的边形成的图就是 最小生成树
prim算法: (适合稠密图,点多边少,可以使用邻接矩阵存储)
prim算法使用贪心的思路每次寻找最小的距离(权值)最终形成最小生成树
prim算法三部曲:
- 选择距离最小生成树最近的 非最小生成树节点
- 加入最小生成树
- 更新非生成树节点 到 生成树的最小距离 (更新minDist数组)
kruskal 算法: (适合稀疏图,点少变多)
kruskal算法使用贪心的思路,将边进行排序,每次寻找 最短的距离(边的权值),最终形成最小生成树
kruskal思路:
- 将边按照权值排序,每次选择最小的权值
- 判断边的两端节点是否在同一集合
- 如果边首尾的两个节点在同一个集合,说明如果连上这条边图中会出现环
- 如果边首尾的两个节点不在同一个集合,加入到最小生成树,并把两个节点加入同一个集合
刷题
- 寻宝
Prim算法
Kruskal算法
总结
int32最大值
maxInt32 := math.MaxInt32
sort方法
func Slice ¶added in go1.8
func Slice(x any, less func(i, j int) bool)
示例代码:
import (
"fmt"
"sort"
)
func main() {
people := []struct {
Name string
Age int
}{
{"Gopher", 7},
{"Alice", 55},
{"Vera", 24},
{"Bob", 75},
}
sort.Slice(people, func(i, j int) bool { return people[i].Name < people[j].Name })
fmt.Println("By name:", people)
sort.Slice(people, func(i, j int) bool { return people[i].Age < people[j].Age })
fmt.Println("By age:", people)
}