hihocoder1089 Floyd算法

题目链接:http://hihocoder.com/problemset/problem/1089

算法描述:

floyd算法是求解图中任意两点最短路的经典算法,复杂度为O(n^3)。虽然我们完全可以用n次dijkstra算法来求任意两点的最短路,复杂度也是O(N^3),但如果有一个算法只需要5行代码就可以完成我们想做的事情,我们有什么理由不用它?!

floyd算法主要用了动态规划的思想:

设d[i][j]表示i到j的最短路径的长度, 那么我们可以这样来求解d[i][j]:

(1)首先,i到j的路径只允许经过节点1,那么:d[i][j] = min(d[i][j], d[i][1]+d[1][j]);

(2)然后我们逐步放开限制,i到j的路径只允许经过点1,2, 那么在(1)的基础上继续更新d[i][j]的值有:d[i][j] = min(d[i][j], d[i][2]+d[2][j]);

.......

注意逐步放开限制的过程!

写成代码就5行:

1 for(int k=1; k<=n; ++k)
2     for(int i=1; i<=n; ++i)
3         for(int j=1; j<=n; ++j)
4             if(i!=j&&j!=k&&d[i][k]!=INF&&d[k][j]!=INF)
5                 d[i][j] = min(d[i][j], d[i][k]+d[k][j]);

我的完整代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 #define MAXN 105
 6 #define INF 0x7fffffff
 7 
 8 int d[MAXN][MAXN], n, m;
 9 
10 void init()
11 {
12     for(int i=1; i<=n; ++i) d[i][i] = 0;
13     for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) if(i!=j) d[i][j] = INF;
14 }
15 
16 void floyd()
17 {
18     for(int k=1; k<=n; ++k)
19         for(int i=1; i<=n; ++i)
20             for(int j=1; j<=n; ++j)
21                 if(i!=j&&j!=k&&d[i][k]!=INF&&d[k][j]!=INF)
22                     d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
23 }
24 
25 int main()
26 {
27     while(cin>>n>>m)
28     {
29         init();
30         while(m--)
31         {
32             int u, v, w;
33             cin>>u>>v>>w;
34             d[u][v] = d[v][u] = min(w, d[u][v]);
35         }
36         floyd();
37         for(int i=1; i<=n; ++i)
38         {
39             for(int j=1; j<n; ++j) cout<<d[i][j]<<" ";
40             cout<<d[i][n]<<endl;
41         }
42     }
43     return 0;
44 }

 

转载于:https://www.cnblogs.com/pczhou/p/4297629.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 思维数组_matlab多维数组

1.一个三维数组由行、列和页三维组成&#xff0c;其中每一页包含一个由行和列构成的二维数组。2.利用标准数组函数创建多维数组Azeros(4,3,2)生成一个4行3列2页的三维全0数组&#xff0c;ones&#xff0c;rand和randn等函数有相似的用法。3.利用直接索引方式生成多维数组Azeros…

css英文左右对齐,中文英文左右padding一致两端对齐实现_js

先看下图&#xff1a;就是一个定宽的容器&#xff0c;左右padding值20像素&#xff0c;结果输入一段文字后(有中文也有英文字符)&#xff0c;会发现右侧根本就不对齐&#xff0c;有些地方距离右侧的空白大小也不是20像素&#xff0c;感觉不和谐&#xff0c;设计师就希望排列能够…

python判断字符类型编程_Python检测数据类型的方法总结

我们在用python进行程序开发的时候&#xff0c;很多时候我们需要检测一下当前的变量的数据类型。比如需要在使用字符串操作函数之前先检测一下当前变量是否是字符串。下面小编给大家分享一下在python中如何检测数据类型 首先我们打开CMD控制台&#xff0c;进入到python环境&…

RDD 编程

文章目录1. RDD 创建2. RDD转换3. RDD动作4. 持久化5. 分区6. 文件数据读写6.1 本地6.2 hdfs6.3 Json文件6.4 Hbase学习自 MOOC Spark编程基础1. RDD 创建 从文件创建 Welcome to____ __/ __/__ ___ _____/ /___\ \/ _ \/ _ / __/ _//___/ .__/\_,_/_/ /_/\_…

centos 限制只能访问某个目录的php文件

vi /etc/php.ini #编辑 open_basedir .:/tmp/ #在380行 设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如&#xff1a;织梦内容管理系统)&#xff0c;可以注销此行&#xff0c; 或者直接写上程序的目录/da…

python saltstack web_saltstack web uiweb平台界面

拾壹015/04/2016 下午 3:254楼2016-04-15 15:18:15,632 [cherrypy.error ][ERROR ][10998] [15/Apr/2016:15:18:15] ENGINE TypeError(“argument of type ‘NoneType’ is not iterable”,)Traceback (most recent call last):File “/usr/lib/python2.6/site-packages/cherry…

楼宇自控ba系统 服务器,楼宇自控BA系统

1、系统介绍楼宇自控系统 (Building Automation System) 针对楼宇内各种机电设备进行集中管理和监控。楼宇控制系统主要包括空调新风机组、送排风机、集水坑与排水泵、电梯、变配电、照明等。在整个楼宇范围内&#xff0c;通过整套楼宇自动控制系统及其内置最优化控制程序和预设…

用python解决生活问题_Python解决生活问题之闹钟程序的实现

昨天下班回家忘了带手机充电器&#xff0c;手机熄火没闹钟了&#xff0c;可现实是迟到30分钟以内要罚100RMB&#xff0c;超过30分钟算旷工要扣除3天工资&#xff0c;想想这代价&#xff0c;好吧&#xff0c;还是自己动手写一个闹钟程序吧&#xff01; 系统环境&#xff1a; Lin…

推荐系统可利用的特征

学自 极客时间 《深度学习推荐系统实战》 推荐系统就是利用“用户信息”&#xff0c;“物品信息”&#xff0c;“场景信息”这三大部分有价值数据&#xff0c;通过构建推荐模型得出推荐列表的工程系统 特征其实是对某个行为过程相关信息的抽象表达 构建特征原则&#xff1a;尽…

搭建git服务器

在远程仓库一节中&#xff0c;我们讲了远程仓库实际上和本地仓库没啥不同&#xff0c;纯粹为了7x24小时开机并交换大家的修改。 GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说&#xff0c;既不想公开源代码&#xff0c;又舍不得给GitHu…

回拨系统服务器,CISCO接入服务器回拨功能的实现

很多人都在实践中配置过CISCO的接入服务器&#xff0c;象2511、2620或者是5300。接入服务器提供了廉价的通过电话拨号远程访问企业网的方式。但是接入服务器提供的回拨功能却很少有人用到。回拨的过程是用户拨通接入服务器&#xff0c;输入用户名/密码&#xff0c;通过认证后&a…

python3时间戳转换成时间_Python3 日期与时间戳相互转换

开发中经常会对时间格式处理&#xff0c;对于时间数据&#xff0c;比如2019-02-28 10:23:29&#xff0c;有时需要日期与时间戳进行相互转换&#xff0c;在Python3中主要用到time模块&#xff0c;相关的函数如下&#xff1a;其中unix_time函数是正常时间转unix时间戳&#xff0c…

iis无法读取配置文件_SpringBoot 有很多读取配置文件的方法,你知道几个? 静态方法读取呢?...

SpringBoot 如何在静态方法中读取配置文件的值在Spring中呢有很多读取配置文件值的相关注解,读取这些配置文件都是依赖于Spring的方式。我发现的读取配置文件的方式有好几种。1、Value 注解2、ConfigurationProperties 和 EnableConfigurationProperties&#xff08;Compent&am…

LeetCode 1837. K 进制表示下的各位数字总和

文章目录1. 题目2. 解题1. 题目 给你一个整数 n&#xff08;10 进制&#xff09;和一个基数 k &#xff0c;请你将 n 从 10 进制表示转换为 k 进制表示&#xff0c;计算并返回转换后各位数字的 总和 。 转换后&#xff0c;各位数字应当视作是 10 进制数字&#xff0c;且它们的…

ajax 请求svg,jQuery append 到AJAX加载的SVG问题

我已成功通过AJAX从外部文件加载了一些svg:$("#svg").load(svgUrl " svg", function() {// do stuff});我的HTML看起来像这样:...我可以看到图形很好。现在&#xff0c;我想向已加载的svg添加一些其他svg元素。我将脚本更改为:$("#svg").load(s…

微信开发学习日记(一):快速阅读5本书,掌握整体背景

2015年1月开始学习微信开发。已经有多年开发经验了&#xff0c;从网上文章来看&#xff0c;微信开发主要是接口&#xff0c;然后是业务逻辑&#xff0c;不是很难。所以&#xff0c;我比较强调学习效率。一天学一点&#xff0c;是不能满足我的快速学习欲望的。在京东上&#xff…

python json序列化对象_Python学习之json序列化

一、什么是序列化在我们存储数据或者网络传输数据的时候&#xff0c;需要对我们的对象进行处理&#xff0c;把对象处理成方便存储和传输的数据格式。这个过程叫序列化&#xff0c;不同的序列化结果也不同&#xff0c;但目的是一样的&#xff0c;都是为了存储和传输在Python中三…

c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...

点击上方“C语言中文社区”&#xff0c;选择“设为星标★”技术干货第一时间送达&#xff01;往期回顾&#xff1a;C语言实例第01期&#xff0c;十进制数转换二进制数C语言实例第02期&#xff0c;判断某一年是否为闰年C语言实例第03期&#xff0c;使用*打印平行四边形实例代码/…

LeetCode 1838. 最高频元素的频数(二分查找)

文章目录1. 题目2. 解题1. 题目 元素的 频数 是该元素在一个数组中出现的次数。 给你一个整数数组 nums 和一个整数 k 。 在一步操作中&#xff0c;你可以选择 nums 的一个下标&#xff0c;并将该下标对应元素的值增加 1 。 执行最多 k 次操作后&#xff0c;返回数组中最高频…

wafer小程序服务器,Wafer - 企业级微信小程序全栈方案

Wafer 服务端 SDK - C#本项目是 Wafer 组成部分&#xff0c;以 SDK 的形式为业务服务器提供以下服务&#xff1a;SDK 获取本项目遵守 MIT 协议&#xff0c;可以直接下载 SDK 源码进行修改、编译和发布。如果使用自动部署并选择 C# 语言&#xff0c;则分配的业务服务器里已经部署…