畅通工程续

某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。

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 畅通工程续的更多相关文章

  1. HDU 1874 畅通工程续【Floyd算法实现】

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

  3. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  4. hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. hdu1874畅通工程续(floyd)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. HDU_1874_畅通工程续_最短路问题

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. hdu 1874 畅通工程续 (floyd)

    畅通工程续Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 畅通工程续——E

    E. 畅通工程续 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让 ...

  9. HDU-1874 畅通工程续 (最短路径启蒙题)

    hdu 1874比较基础,拿来练各种刚学会的算法比较好,可以避免好多陷阱,典型的最短路模板题 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memor ...

随机推荐

  1. 基于AQS自己实现一个同步器

    前面说了这个多,我们可以自己尝试实现一个同步器,我们可以简单的参考一下ReentrantLock这个类的实现方式,我们就简单的实现一个不可重入的独占锁吧! 一.简单分析ReentrantLock的结构 ...

  2. 015、MySQL取今天是第几季度,往后几个月是第几季度

    #取今天是第几季度 SELECT QUARTER( curdate( ) ); #取往后几个月是第几季度 , INTERVAL MONTH ) ); , INTERVAL MONTH ) ); , I ...

  3. JuJu团队12月4号工作汇报

    JuJu团队12月4号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 调试 无 无 婷婷 和陈灿一起提升acc 无 无 恩升 纠正chunk evaluator 无 无 ...

  4. springboot - 在servlet中映射Errors 脱离spring mvc

    应用不用Spring MVC, 采用ErrorPageRegistrar 接口能直接映射errors. 1.概览 2.java代码 1).MyAppServlet package com.ebc.se ...

  5. Linux: 桥接 NET HOST-only

    桥接 虚拟机会利用真实的网卡和真实计算机之间通信  还能和同一局域网之间的计算机之间通信 缺点:会耗费一个ip地址 NET:虚拟机会通过VMnet8 虚拟的网卡与真实计算机之间通信    如果真实计可 ...

  6. LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)

    LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...

  7. java 循环节长度

    循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153- 其循环节为[846153] 共有6位. 下面的方法,可以求出循环 ...

  8. springcloud--zuul(过滤器)

    在zuul添加过滤器 新建类继承ZuulFilter类. public class MyFilter extends ZuulFilter{ //是否需要过滤 @Override public boo ...

  9. 【ABP】从零开始学习ABP_入门介绍

    本文介绍自己入坑ABP的过程,一些ABP的相关文章.QQ群,以及ABP Zero示例项目的运行. 背景 作为一个半路出家学习编程的新人,之前工作中也断断续续写过一些代码,但底层核心一直没机会学习,所以 ...

  10. 常见的四种Essay Reference写作格式大全

    Essay包括四个部分——introduction,Main body,conclusion,Reference. 1.Introduction包括Topic的背景介绍和文章主要解决的主要问题,一般是 ...