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最小环&&模板的更多相关文章

  1. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...

  2. HDU1599(Floyd最小环)

    Floyd最小环理解+模板: https://www.cnblogs.com/DF-yimeng/p/8858184.html 除了上述博文里写的,我再补充几点我的理解. 1.为什么先枚举ij求经过i ...

  3. D. Shortest Cycle(floyd最小环)

    D. Shortest Cycle time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  4. 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 ...

  5. HDU - 6080 :度度熊保护村庄 (凸包,floyd最小环)(VJ1900题达成)

    pro:二维平面上,给定N个村庄.M个士兵驻守,把村庄围住,现在我们想留下更多的士兵休息,使得剩下的士兵任然满足围住村庄.N,M<500: sol:即是要找一个最小的环,环把村庄围住. 由于是环 ...

  6. floyd求最小环 模板

    http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...

  7. Vijos1046观光旅游[floyd 最小环]

    背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...

  8. HD1599 find the mincost route(floyd + 最小环)

    题目链接 题意:求最小环 第一反应时floyd判断,但是涉及到最少3个点,然后就不会了,又想的是 双联通分量,这个不知道为什么不对. Floyd 判断 最小环 #include <iostrea ...

  9. bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2970  Solved: 787[Submit][Status][ ...

随机推荐

  1. Code Index: 基于Lucene.Net的代码检索工具

    目录 用途 Github地址 示例 特性 用途 维护一个拥有巨大代码量的项目, 依靠自带的代码搜索工具搜索速度缓慢, 一个快速的代码检索工具就显得极为必要, 所以自己撸了个小工具. Github地址 ...

  2. pc 媒体查询

    PC端 按屏幕宽度大小排序(主流的用橙色标明) 分辨率   比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3  | 10.4寸.12.1寸.14.1寸.15寸; ) ...

  3. Arch Linux安装配置-双系统(1)

    Arch Linux启动盘准备: 在Windows下安装Win32 Disk Imager,打开页面,点击Download即可! 安装配置 1.选择我同意 2.选择安装位置路径 3.打勾,在桌面显示图 ...

  4. Bash语句中的循环语句注意事项

    case #!/bin/bash case $1 in 9) echo "nine" ;; 8) echo "eight" ;; 7) echo "s ...

  5. spring的ioc依赖注入的三种方法(xml方式)

    常见的依赖注入方法有三种:构造函数注入.set方法注入.使用P名称空间注入数据.另外说明下注入集合属性 先来说下最常用的那个注入方法吧. 一.set方法注入 顾名思义,就是在类中提供需要注入成员的 s ...

  6. Js遍历数组总结

    Js遍历数组总结 遍历数组的主要方法为for.forEach.map.for in.for of for var arr = [1,2,3,4,5]; var n = arr.length; // 直 ...

  7. hdu1455 拼木棍(经典dfs)

    给定木棍序列,求解能将木棍拼成相同长度的数根长木棍的情况下长木棍长度的最小值. /*hdu1455dfs */ #include<bits/stdc++.h> using namespac ...

  8. 第十四周java实验作业

    实验十四  Swing图形界面组件 实验时间 20178-11-29 1.实验目的与要求 (1) 掌握GUI布局管理器用法: 在java中的GUI应用 程序界面设计中,布局控制通过为容器设置布局管理器 ...

  9. GitLab → 搭建中常遇的问题与日常维护

    开心一刻 隔壁有一个80多岁的老大爷,昨天在小区的一棵树下发现一条黑色的蛇,冻僵了,大爷善心大发,就把蛇揣在了怀里,想给它一点温暖. 今天一大早看到大爷在树上挂了一个牌子,写到:不准随地大小便! 搭建 ...

  10. 使用条件随机场模型解决文本分类问题(附Python代码)

    对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!http://www.tensorflownews.com.我们的公众号:磐创AI. 一. 介绍 世界上每天都在生成数量惊人的文 ...