[板子]Floyd&Dijkstra
谨以此笔记记录jjw高三党四个月学习NOI的历程..如转载请标记出处
Floyd算法:
默认是业界最短路最简单的写法,并且只有五行。时间复杂度为O(N3),空间复杂度为O(N2)。
;k<=n;k++){
;i<=n;i++){
;j<=n;j++){
if(f[i][j]>f[i][k]+f[k][j]){
f[i][j]=f[i][k]+f[k][j];
}
}
}
}
简单来说就是通过另一个点个点来收缩一个点到一个点的距离,如果f[i][j]>f[i][k]+f[k][j]的话就把f[i][j]变成f[i][k]+f[k][j]
emm...再简单的一个例子就是(1,2)=10,但是(1,3)+(3,2)=5,那么就可以通过点3把(1,2)的距离变为5。
还是很简单的吧...
Dijkstra算法:
刚刚的Floyd能够通过空间复杂度为On3的方法算出所有点到所有点的最短路,但是这样做在某些题目中会炸掉或者T掉,那么怎么解决单源最短路径?
(其实所有的最短路径都可以从啊哈磊先生的啊哈算法中找到详细讲解)
在我理解下的Dijkstra分为以下几个部分:
1、在二维图中标记已知路径,将位置路径设为inf
;i<=n;i++){
;j<=n;j++){
if(i==j){
a[i][j]=;
}else{
a[i][j]=inf;
}
}
}//inf一般为0xf
;i<=m;i++){
int v,r,w;
scanf("%d%d%d",&v,&r,&w);
if(a[v][r]>w){
a[v][r]=w;
}//这里一定要注意是否为有向边还是无向
}
2、数组dis和数组book
;i<=n;i++){
f[i]=a[][i];
}
b[]=;
3、主要算法:
;i<=n;i++){
;
;j<=n;j++){
if(!b[j]&&f[j]<minx){
minx=f[j];
u=j;
}
}
b[u]=;
;j<=n;j++){
if(!b[j]){
if(f[j]>f[u]+a[u][j]){
f[j]=f[u]+a[u][j];
}
}
}
}
解释以下:book数组用来记录松弛每个边,然后在循环每一个点中依次松弛从这个点到其他最小一个点的路径长短,比如前7行就是在找距离1号最短距离的X号,然后对X号松弛
第九行将准备松弛的点固定,然后松弛其它边。
应该是比较难理解的..不过多做几道题就差不多会写了。
题目:洛谷1576,2384
[板子]Floyd&Dijkstra的更多相关文章
- 最短路(floyd/dijkstra/bellmanford/spaf 模板)
floyd/dijkstra/bellmanford/spaf 模板: 1. floyd(不能处理负权环,时间复杂度为O(n^3), 空间复杂度为O(n^2)) floyd算法的本质是dp,用dp[k ...
- 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)
几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3). Floyd-Warshall算法(Floyd ...
- UVA-10269 (floyd+dijkstra)
题意: 现在有A个村庄,B个城堡,现在要从1到A+B,有M条路,魔法鞋最多能用K次,每次的长度不超过L,且起点和终点一定是村庄和城堡,而且每次使用魔法鞋不能穿过城堡,问最短时间是多少; 思路: 先用F ...
- HDU1874畅通工程续(floyd||dijkstra)
看了看floyd和dijkstra,然后就找了两个练习来捉 #include<iostream> #include<stdio.h> #include<string.h& ...
- POJ 1502 MPI Maelstrom( Spfa, Floyd, Dijkstra)
题目大意: 给你 1到n , n个计算机进行数据传输, 问从1为起点传输到所有点的最短时间是多少, 其实就是算 1 到所有点的时间中最长的那个点. 然后是数据 给你一个n 代表有n个点, 然后给你一 ...
- 最短路问题 Floyd+Dijkstra+SPFA
参考博客:https://blog.csdn.net/qq_35644234/article/details/60875818 题目来源:http://acm.hdu.edu.cn/showprobl ...
- hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa
http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...
- Floyd && Dijkstra +邻接表 +链式前向星(真题讲解来源:城市路)
1381:城市路(Dijkstra) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 4066 通过数: 1163 [题目描述] 罗老师被邀请参加一个舞会,是 ...
- 最短路径算法总结(floyd,dijkstra,bellman-ford)
继续复习数据结构和算法,总结一下求解最短路径的一些算法. 弗洛伊德(floyd)算法 弗洛伊德算法是最容易理解的最短路径算法,可以求图中任意两点间的最短距离,但时间复杂度高达\(O(n^3)\),主要 ...
随机推荐
- 【编程之外】还记得曾经给'大学导师'写过的报告嘛 --> 前方高能
写在前面 本文不是讲技术的,也没什么代码可看 本文不是讲技术的,也没什么代码可看 本文不是讲技术的,也没什么代码可看 还记得我们曾经给我们大学''导师''写过的报告嘛? 大学他愿意在凌晨6点向你询问近 ...
- DialogFragment的应用
一.DialogFragment简单介绍: 1.基本概念 DialogFrament 指一个与fragment建立了关联的Dialog, 随fragment生, 随fragment死, 即Dialog ...
- Java 基础语法
一.关键字 定义:被 Java 赋予特殊含义的单词. 特点:基本上都是英文小写. 用于定义数据类型的关键字 基本数据类型 整数型(默认为 int) byte(8 位,1 字节,默认值是 0,最大存储数 ...
- POJ-1273-Drainage Ditches(网络流之最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- 五年.net程序员转型Java之路
大学毕业后笔者进入一家外企,做企业CRM系统开发,那时候开发效率最高的高级程序语言,毫无疑问是C#.恰逢公司也在扩张,招聘了不少.net程序员,笔者作为应届生,也乐呵呵的加入到.net程序员行列中. ...
- Java历程-初学篇 Day08 数组
一,什么是数组 所谓数组,是相同数据类型的元素按一定顺序排列的集合.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...
- (原)怎样解决python dataframe loc,iloc循环处理速度很慢的问题
怎样解决python dataframe loc,iloc循环处理速度很慢的问题 1.问题说明 最近用DataFrame做大数据 处理,发现处理速度特别慢,追究原因,发现是循环处理时,loc,iloc ...
- ZOJ2286 Sum of Divisors 筛选式打表
我想我是和Segmentation Fault有仇,我一直以为是空间开大的问题,然后一直减少空间,还是SF,谁让n没有给范围了,qwq. 教训:以后注意输入范围和开的空间大小. #include< ...
- flex的三个属性:
(1)flex-grow:指的是相对于其他的子元素的扩展比率:默认值为0:数字 (2)flex-basis:指的是子元素的具体长度:可以为长度(rem,px,em)也可以为百分比: (3)flex-s ...
- 关于Android SDK Manager无法获取更新列表的正确设置
1.以"管理员身份运行"SDK Manager. 2.Android SDK Manager"=>"Tools"=>"Optio ...