最小环
顾名思义,最小环即为带权图中最短的环路
算法
主要是floyd和dij两种
Floyd
floyd三层循环中,最外层k循环代表用上第k个点的最短路,在刚开始时,所有节点最短路中都是仅包含前k-1个节点的,
我们在floyd跑带有k节点的循环前进行操作,枚举i,j。i-j-k-i为一个可能的环路。其中i-j我们用跑出的dis数组来表示,因为floyd性质确保了i-j的最短路中没有k节点存在,之后j-k和k-i我们用他们之间本来的边来表示,更新答案。
代码
#include<cstdio>
#include<iostream>
#include<iomanip>
#include<map>
#include<unordered_map>
#include<string>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
#define int long long
//#define double long double
using namespace std;
typedef long long ll;
const int maxn=150;
const