floyd最小环&&模板
floyd的核心代码:
;k<=n;k++){ ;i<=n;i++){ ;j<=n;j++){ dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } } }
通过中间节点k去松弛i到j的距离,这是floyd算法的核心
------------------------------------------------------------------------------------
floyd最小环是在floyd基础上的一点修改,问题大概是这样:求一条从源点出发,最后再返回源点的最短路线。
算法描述:对一张给定的图,我们可以通过如下形式寻环:u->k->v->u,其中v->....->u是一条不经过k的路径
ps:至少3点才能成环
寻环的部分有一个疑问:为什么寻环代码必须放在松弛代码的前面?
比如说 松弛的时候->dis[i][j]=maze[i][k]+maze[k][j],那么此时寻环部分放到松弛代码后面相当于一条路径来回走动,而不成环
寻环的注意事项:
1.两个点必然是不同的
2.初始的路径最短距离不能取0x3f3f3f3f,因为可能溢出
3.寻环代码必须在松弛代码前面
4.最外层的K是作为最大的节点
上代码:模板
find the mincost route HDU - 1599
#include<iostream> #include<cstring> #include<math.h> #include<stdlib.h> #include<cstring> #include<cstdio> #include<utility> #include<algorithm> #include<map> using namespace std; typedef long long ll; ; const int inf=0x1f3f3f3f;//不能设置太大,用0x3f3f3f3f就wa了 int n,m,ans; ][]; ][]; void floyd(){ ans=inf; ;k<=n;k++){//前K-1个点的情况递推前K个点的情况 //松弛之前枚举ij求经过ijk的最小环 ;i<k;i++){ ;j<k;j++){//注意了这里是i+1,//两个点必然是不同的 //如果取inf为0x3f3f3f3f那么这里可能会爆精度 //三点成环(从k点出发,回到k点) ans=min(ans,dis[i][j]+maze[i][k]+maze[k][j]); //如果这部分代码放在后面,可能会导致 // dis[i][j]=maze[i][k]+maze[k][j] //相当于一条路径来回走动,而不成环 } } ;i<=n;i++){ ;j<=n;j++){ dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } } } if(ans!=inf)cout<<ans<<endl; else cout<<"It's impossible."<<endl; } void init(){ ;i<=n;i++){ ;j<=n;j++){ if(i==j){ maze[i][j]=dis[i][j]=;continue; } maze[i][j]=dis[i][j]=inf; } } } int main() { ios_base::sync_with_stdio(); cin.tie(); cout.tie(); while(cin>>n>>m&&n&&m){ ans=inf; init();//初始化 ;i<=m;i++){ int u,v,w; cin>>u>>v>>w; maze[u][v]=maze[v][u]=dis[u][v]=dis[v][u]=min(w,maze[u][v]); } floyd(); } ; }
floyd最小环&&模板的更多相关文章
- POJ 1734.Sightseeing trip (Floyd 最小环)
Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...
- HDU1599(Floyd最小环)
Floyd最小环理解+模板: https://www.cnblogs.com/DF-yimeng/p/8858184.html 除了上述博文里写的,我再补充几点我的理解. 1.为什么先枚举ij求经过i ...
- D. Shortest Cycle(floyd最小环)
D. Shortest Cycle time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- hdoj 1599 find the mincost route【floyd+最小环】
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU - 6080 :度度熊保护村庄 (凸包,floyd最小环)(VJ1900题达成)
pro:二维平面上,给定N个村庄.M个士兵驻守,把村庄围住,现在我们想留下更多的士兵休息,使得剩下的士兵任然满足围住村庄.N,M<500: sol:即是要找一个最小的环,环把村庄围住. 由于是环 ...
- floyd求最小环 模板
http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...
- Vijos1046观光旅游[floyd 最小环]
背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...
- HD1599 find the mincost route(floyd + 最小环)
题目链接 题意:求最小环 第一反应时floyd判断,但是涉及到最少3个点,然后就不会了,又想的是 双联通分量,这个不知道为什么不对. Floyd 判断 最小环 #include <iostrea ...
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2970 Solved: 787[Submit][Status][ ...
随机推荐
- Java已五年1—二本物理到前端实习生到Java程序员「回忆贴」
关键词:郑州 二本 物理专业 先前端实习生 后Java程序员 更多文章收录在码云仓库:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 没有 ...
- [组件封装]微信小程序-日历
描述 切换月份, 当天文案为今天, 日期背景变色, 日期红点标识, 点击选中日期. 效果 源码 calendar.wxml <view class="component"&g ...
- Mybatis(三)Mybatis映射开发
4.1 一对一 4.1.1 表对应关系, 一个订单对应一个用户 4.1.2 实体对应关系 public class Order { private int id; private Date order ...
- 使用 Docker 部署 Spring Boot 项目
Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- IE 跨域session丢失问题
在测试时发现session 取不到值,以为是session赋值除了问题,但是在Chrome中一切正常,故排除此原因.那问题肯定出在浏览器身上里.于是一步一步调试,发现在IE中,如果页面跳转,Sessi ...
- Jupyter的安装和基本使用
1. 安装Jupyter pip install jupyter 2. Jupyter的初次使用 # 进入虚拟环境 workon ai # 输入命令 jupyter notebook 本地notebo ...
- beautifulsoup实现文章截取和脚本攻击
引子:现在我们所写的所有高大上,炫酷的网页,在数据库中是如何存储的呢?其实数据库中存储的所有高大上的文章都是存的html,然后我们平时看的写的都是由于编辑器的原因,在编辑器内部做了转换,所以我们可以直 ...
- Selenium系列(七) - 切换iframe
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 为什么你的程序配了classpath还是找不到类
classpath简介 classpath是java程序时拥有的一个系统变量,这个变量可以通过如下方式获取 System.out.println(System.getProperty("ja ...
- effective-java学习笔记---注解优于命名模式39
命名模式的缺点有以下三点:(在第 4 版之前,JUnit 测试框架要求其用户通过以 test[Beck04] 开始名称来指定测试方法) 1.拼写错误导致失败,但不会提示. 2.无法确保它们仅用于适当的 ...