最短路问题--Floyd 畅通工程续
畅通工程续
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数$N$和$M$$(0<N<200,0<M<1000)$,分别代表现有城镇的数目和已修建的道路的数目。城镇分别以$0$~$N$-$1$编号。
接下来是M行道路信息。每一行有三个整数$A$,$B$,$X$$(0<=A,B<N,A!=B,0<X<10000)$,表示城镇A和城镇B之间有一条长度为$X$的双向道路。
再接下一行有两个整数$S$,$T$$(0<=S,T<N)$,分别代表起点和终点。
Output
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从$S$到$T$的路线,就输出-1.
Floyd:
动态转移方程 $dist[i][j] = min(dist[i][j],dist[i][k] + dist[k][j])$;
初始化//$dist[i][j]$ 表示从i到j之间的最短距离
//dist[i][j] 表示从i到j之间的最短距离
int dist[maxn][maxn];
for (int i = ; i< n ;i++)
for (int j = ;j< n ;j++)
dist[i][j] = edge[i][j];
时间复杂度 节点个数 $N$,边个数 $M$ $O$($N^3$)
• 求所有节点到节点 $1$ 的最短距离
1. 初始化
• $dist$ 矩阵 – $dist[i][j]$ 表示节点 $i$ 到节点 $j$ 之间的最短路径长度 – $dist$ 初始化为 $edge$
2. 流程
(a) $step$ 1 • 通过节点 1 作为中转节点更新$dist$ • 更新公式 $dist[i][j]$ = $min(dist[i][1] + dist[1][j],dist[i][j])$;
(b) $step$ 2 • 通过节点 2 作为中转节点更新 $dist$ • 更新公式 $dist[i][j]$ = $min(dist[i][2] + dist[2][j],dist[i][j])$;
(c) $step$ 3 • 通过节点 3 作为中转节点更新 $dist$ • 更新公式 $dist[i][j]$ = $min(dist[i][3] + dist[3][j],dist[i][j])$;
(d) $step$ 4 • 通过节点 4 作为中转节点更新 $dist$ • 更新公式 $dist[i][j]$ = $min(dist[i][4] + dist[4][j],dist[i][j])$;
(e) $step$ 5 • 通过节点 5 作为中转节点更新 $dist$ • 更新公式 $dist[i][j]$ = $min(dist[i][5] + dist[5][j],dist[i][j])$;
有一说一,这道题显然代码为:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int const maxn=;
int const INF=1e9;
int dist[maxn][maxn];
int n,m;
int floyd(int s,int t){
for(int t = ;t < n;t++)
for(int i = ;i < n;i++)
for(int j = ;j < n;j++)
if(dist[i][j] > dist[i][t] + dist[t][j])
dist[i][j] = dist[i][t] + dist[t][j];
if(dist[s][t] == INF)
return -;
else
return dist[s][t];
}
int main(){
int a,b,x,s,t,ans;
while(scanf("%d %d",&n,&m) != EOF) {
for(int i = ;i < n;i++)
for(int j = ;j < n;j++)
dist[i][j] = (i == j ? : INF);
while(m--)
{
scanf("%d %d %d",&a,&b,&x);
if(x < dist[a][b])
dist[a][b] = dist[b][a] = x;
}
scanf("%d %d",&s,&t);
ans = floyd(s,t);
printf("%d\n",ans);
}
return ;
}
最短路问题--Floyd 畅通工程续的更多相关文章
- HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu1874畅通工程续(floyd)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU_1874_畅通工程续_最短路问题
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续 (floyd)
畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 畅通工程续——E
E. 畅通工程续 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让 ...
- HDU-1874 畅通工程续 (最短路径启蒙题)
hdu 1874比较基础,拿来练各种刚学会的算法比较好,可以避免好多陷阱,典型的最短路模板题 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memor ...
随机推荐
- Golang gin开源实例——表设计
UML Model 基本模型定义 type Model struct { ID int `gorm:"primary_key" json:"id"` Creat ...
- CI自带的文件上传及生成缩略图
/* * 文件上传 * @param $upload_path 文件上传路径 * @param $formpic 表单name属性名称 */ private function doUpload($up ...
- 025、MySQL字符串大小写转化函数,文本转化大写,文本转化小写
#变大写 SELECT UPPER('abcdABCD123a'); #ABCDABCD123A SELECT UCASE('abcdABCD123a'); #ABCDABCD123A #变小写 SE ...
- delphi关闭和禁用Windows服务
function StopServices(const SvrName: string): Boolean; var SCH, SvcSCH: SC_HANDLE; SS: TServiceStatu ...
- pyhton中pandas数据分析模块快速入门(非常容易懂)
//2019.07.16python中pandas模块应用1.pandas是python进行数据分析的数据分析库,它提供了对于大量数据进行分析的函数库和各种方法,它的官网是http://pandas. ...
- log4j配置文件——hibernate
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j ...
- 17 Resources AssetBundle资源打包
Resources在Unity中可以使用www类加载远程文件或本地文件,或是在脚本中定义字段或数组从外部拖入. 在Unity中提供了Resources类读取资源要通过Resources类读取的文件必须 ...
- 04 MySQL数据类型
MySQL支持的数据类型 1.数值类型: a.整数类型 TINYINT 1字节 有符号(-128~127); 无符号(0~255) SMALLINT 2字节 有符号(-3276 ...
- 【剑指Offer】面试题32 - I. 从上到下打印二叉树
题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...
- 强制数据类型转换 字符串/数字/boolean
类型转换主要指,将其他数据类型转换为(String.Number.Boolean) 类型转换有显式类型转换 和隐式类型转换 显式类型转换 1.1转换为string 调用数据的 toString() 方 ...