加上负环检测
补全 has_neg_cycle:先松弛 n-1 轮,再多试一轮——还能松弛成功就说明有负环。验两张图,把两个结果拼起来输出(有负权边那张在前)。 (本题用 g++ -std=c++17 -O0 编译。)
一张一致一张不一致
Dijkstra 已经写好。补全 bellman,在两张结构相同的图上各跑一次,比较两种算法求出的 0 到 3 的距离:2→1 那条边是 +3(全是非负权)的一张,和 -3(有负权边)的一张。两个结论(结果一致 / 结果不一致)用 / 拼起
最小生成树是什么
第 1 步:五个点、五条边 第 2 步:挑四条边,全都连上 第 3 步:1 + 1 + 2 + 3,最贵的没用 0 1 3 2 4 2 1 3 9 1 一张连通图的最小生成树是【0】。
生成树有多少条边
n 个顶点的生成树一定有【0】边。
MST 和最短路差在哪(C++)
最小生成树和最短路的区别是【0】。
五个点连起来最少多少
主连通块有五个点、五条边:0-1:2 0-2:1 1-3:3 2-4:9 3-4:1。运行下面这段程序,看最小总长和用了几条边: #include <algorithm> #include <iostream> #i
五条边按权重排好
把这五条边按 (权重, 两端编号) 从小到大排一遍。运行下面这段程序: #include <algorithm> #include <iostream> #include <queue> #include
暴力枚举所有生成树
补全 brute_mst:从五条边里取出所有四条边的组合,判断它是不是一棵生成树(不成环),取总长最小的。 (本题用 g++ -std=c++17 -O0 编译。)
拆掉一条边成本变多少
补全 without:去掉指定的一条边。分别拆掉最贵的 2-4(权重 9)和最便宜的 0-2(权重 1),各重新算一次最小总长,两个总长拼起来输出(拆最贵的在前)。 (本题用 g++ -std=c++17 -O0 编译。)
Kruskal 的做法
第 1 步:边按权重从小到大排好 第 2 步:权重 1:0-2 要 第 3 步:权重 1:3-4 要 第 4 步:权重 2:0-1 要 第 5 步:权重 3:1-3 要 第 6 步:权重 9:两端已通,跳过 0 1 3 2 4 2 1 3