Floyd最小环算法
问题描述: 给你一张无向图,定义环为从i出发到达j然后从j返回i并且所有点都只经过一次(最少为3个点),求所有环当中经过路径最小的环
算法描述: 首先容易想到的是暴力来枚举环,当删除其中一条边ij后再跑一边从i到j的最短路,然后加上边ij的值就是含有边ij的最小环的值,这样最坏的 时间复杂度可以达到O(n^4),显然复杂度有点大。
所以我们考虑降低时间复杂度,我们来分析下floyd的实现过程,当枚举顶点k之前我们已经求得了顶点为1 - k-1 的最短
路,所以我们可以在跟新k之前枚举k之前的i和j的组合,我们可以知道dis[i][j]没有经过k点,所以我们就可以知道
如果dis[i][j]+mp[i][k]+mp[k][j] != inf(mp[i][j]为没有跟新得边值) 时就存在一条经过ijk的最小环,所以我们要求的是所有环当
中最小的哪一个!
HDU1599:
find the mincost route
Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4556 Accepted Submission(s): 1838
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。
最小环模板题:可以当模板
AC代码:(c++)
#include<algorithm>
#include<iostream>
#include<cstdio>using namespace std;const int maxn = 105;
const int inf = 1e8;class Floyd{
public:int n,m;int dis[maxn][maxn],mp[maxn][maxn];int init(){if(scanf("%d%d",&n,&m)!=2)return -1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mp[i][j]=dis[i][j]=inf;for(int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);mp[u][v]=mp[v][u]=dis[u][v]=dis[v][u]=min(w,mp[u][v]);}}void floyd(){int MinCost = inf;for(int k=1;k<=n;k++){for(int i=1;i<k;i++)for(int j=i+1;j<k;j++)MinCost = min(MinCost,dis[i][j]+mp[i][k]+mp[k][j]);//跟新k点之前枚举ij求经过ijk的最小环for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); //跟新k点}if(MinCost==inf)puts("It's impossible.");else printf("%d\n",MinCost);}}fd;int main()
{while(~fd.init())fd.floyd();return 0;
}
Floyd最小环算法相关推荐
- floyd 判圈算法 UVa 11549 计算器谜题
题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- leetcode202(Floyd判圈算法(龟兔赛跑算法))
Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...
- Floyd判圈算法(Floyd's cycle detection
Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm).该算法由美国科学家罗伯特·弗洛伊德发明 ...
- 坐在马桶上看算法:只有五行的Floyd最短路算法
坐在马桶上看算法:只有五行的Floyd最短路算法 此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在"Communications of the ACM" ...
- floyd判环算法(龟兔赛跑算法)
floyd判环算法(龟兔赛跑算法) 注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的). (图不是我的) 如果只要求环的 ...
- 【啊哈!算法】算法6:只有五行的Floyd最短路算法
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有 ...
- 【算法】只有五行的Floyd最短路算法
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字 ...
- UVa 11549 Calculator Conundrum (训练指南,Floyd 判圈算法)
算法竞赛训练指南, 42 页 注意: 1. 用数组来记录一个数的各位的数字 2. 快慢指针来记录链表环的入点(Floyd 判圈算法) #include <cstdio> #include ...
- matlab求解关键,基于遗传算法的多辆洒水车最优路径求解(其中包含MATLAB的一些关键语句说明和Floyd,Dijkstra,Euler算法).doc...
基于遗传算法的多辆洒水车最优路径求解(其中包含MATLAB的一些关键语句说明和Floyd,Dijkstra,Euler算法) 摘要 车辆路径问题可以分为以点为服务和以边为服务两种,洒水车问题是以边为服 ...
最新文章
- 使用Kettle抽取数据时,出现中文乱码问题解决方案
- 二、JavaWeb总结:Tomcat服务器的学习和使用
- 再谈新浪微博架构——视频观后笔记
- OPEN(SAP) UI5 扫盲
- STL 二分查找 upper_bound和lower_bound用法
- python open读取_python,一读取文件open()
- 奇怪,有的Python函数或方法调用需要两对括号?
- markDown用这一招实现图片并排显示
- db link hang的解决方法
- 一分钟搞懂的算法之BPE算法
- Java 多维数组 三维数组 初始化 赋值 打印
- StarUml:Exception EOleSysError in module StarUML.ex
- 谷歌输入法/谷歌拼音输入法/WIN7好用的输入法
- Android截屏的几种方法
- Web前端鼠标变小手CSS和JS(Vue)两种实现
- oracle回撤,Oracle使用排列组合计算最大回撤幅度
- fpga 级联fifo(VHDL)
- 实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人
- [计算机网络]HTTP、UDP、TCP协议
- Matlab 安装免费提供的 MinGW-w64 C/C++ 编译器
热门文章
- linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题操作说明
- 【渝粤教育】国家开放大学2018年秋季 0686-21T广告创意与表现(一) 参考试题
- 计算机视觉自学进阶路上不可忽略的几个原创公众号
- ThinkPHP3.1在PHP7下页面空白的解决方案
- python sci数据_scanpy学习笔记:用Python分析单细胞数据
- 听过很多道理,却依然过不好这一生
- Javaweb学习(一)
- 小鱼赚钱app是真的吗?小鱼赚钱下载试玩应用教程
- PixHawk飞控和Mission Planner地面站安装调试
- resources目录下文件加载失败,class path resource [***] cannot be resolved to URL because it does not exist