图论 —— 环与块 —— 最小环
【概述】
从一个点出发,经过一条简单路径回到起点,称为图的环,而图的最小环就是所有环中长度最小的。
所谓最小环问题,最小环就是指在一张图中找出一个环,使得这个环上的各条边的权值之和最小。
【求最小环】
Floyd 算法可以在求最短路的同时求出图的最小环。
记两点间的最短路为 dis[i][j],w[i][j] 为边 < i,j > 的权值,res 为图的最小环
一个环中最大的节点为 k,与它相连的节点为 i、j,这个环的最短长度为 w[i][k]+w[k][j]+(i 到 j 的路径中所有节点编号都小于 k 的最短路径长度)
根据 Floyed 原理,在最外层进行 k-1 次循环之后 dis[i][j] 代表了 i 到 j 的路径中,所有结点编号都小于 k 的最短路径,因此该算法一定能找到图中的最小环。
关于 Floyd 算法:点击这里
int res=INF;
for(int k=1;k<=n;k++){//第一重循环为i→j的中间点k
for(int i=1;i<=n;i++)//第二重循环为起点i
for(int j=1;j<=n;j++)//第三重循环为终点j
res=min(res,dis[i][j]+w[j][k]+w[k][i]);//环的最短长度
for(int i=1;i<=n;i++)//第二重循环为起点i
for(int j=1;j<=n;j++)//第三重循环为终点j
dis[i][j]=min(dis[i][j],w[i][k]+w[k][j]);//最短路径
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了