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][ ...
随机推荐
- Http报文和Request和Response的常用方法
简述 它是HTTP应用程序之间发送的数据块.这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分.这些报文都是在客户端.服务器和代理之间流动. HTTP报文的流 ...
- ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
问题描述: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory 首先检 ...
- 六、深浅拷贝与while循环
一.深浅拷贝 3.1 浅copy: 浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表 用法: list1=[ 'egon', 'lxx', [1,2] ] list2=list1. ...
- 两个看似相同,结果不同的SQL逻辑
一朋友问我的,看着挺有意思,记录一下: 表item1,里面有上面三个字段,一共10条数据,接下来有两个相似的sql语句得到了不一样的查询结果. 表数据如下: 两条SQL及查询结果: 我的理解答: S ...
- Python第五章-内置数据结构03-元组
Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...
- Building Applications with Force.com and VisualForce (DEV401) (二一):Visualforce Componets (Tags) Library Part 1
Dev401-022:Visualforce Pages: Visualforce Componets (Tags) Library Part 1 Module Objectives1.List ke ...
- TensorFlow 模型优化工具包 — 训练后整型量化
模型优化工具包是一套先进的技术工具包,可协助新手和高级开发者优化待部署和执行的机器学习模型.自推出该工具包以来, 我们一直努力降低机器学习模型量化的复杂性 (https://www.tensorfl ...
- js 的位运算
api 用途 待更...
- 数据结构与算法复习-----leetcodeOJ题解
Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are isom ...
- Android | 教你如何用代码一键实现银行卡绑定
前言 小编前面几期文章分别给大家介绍了用代码实现微笑抓拍.证件照DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是用代码一键实现银行卡识别与绑定功能. 银行卡识别的应用场景 ...