最短路

floyd算法

  • floyd是一个基于贪心思维和动态规划思维的计算所有点到所有点的最短距离的算法。

P57-图-8.Floyd算法_哔哩哔哩_bilibili

对于每个顶点v,和任一顶点对(i,j),i=j,v=i, v≠j,如果A[i][j]> A[i][v]+ A[v][j],则将 A[i][j] 更新

为 A[i][v] + A[v][j]的值,并且将 Path[i][j]改为v。

void Floyd(int n,float MGraph[][n],int Path[][n])
{
int i,j,v;
int A[n][n];
//初始化A数组和Path数组
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
A[i][j]=MGraph[i][j];
Path[i][j]=-1;
}
//进行Floyd算法
for(v=0;v<n;v++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]>A[i][v]+A[v][j])
{
A[i][j]=A[i][v]+A[v][j]
Path[i][j]=v;
}
}
void printPath(int u,int v,int path[][max])
{
if(path[u][v]==-1)
printf("<%d,%d> ",u,v);
else
{
int mid=path[u][v];
printPath(u,mid,path);
printPath(mid,v,path);
}
}

floyd例题

U80592 【模板】floyd - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目背景

模板题,无背景

题目描述

给出n个点,m条边的无向图,求每个点到其他点的距离之和%998244354的值

输入格式

第一行两个数n,m含义如上 从第二行开始,共m行,每行三个数x,y,l,代表从x到y点的长度为l

输出格式

n行,每行一个数,第i行代表点i到其他点的距离之和

输入输出样例

输入 #1复制

2 1
1 2 4

输出 #1

4
4

输入 #2

4 5
1 2 1
1 3 2
2 3 2
3 4 3
2 4 4

输出 #2

8
7
7
12

说明/提示

模板题,保证图联通 n<=500 m<=10000 1<=x,y<=n l<=1e9

#include <stdio.h>
#define MaxN 501
#define MOD 998244354
long long distance[ MaxN ][ MaxN ]; void floyd( int pointnum ) {
int i, j, k;
for ( k = 1; k <= pointnum; k ++ ) {
for ( i = 1; i <= pointnum; i ++ ) {
for ( j = 1; j <= pointnum; j ++ ) {
if ( distance[ i ][ k ] != -1 && distance[ k ][ j ] != -1 ) {
if ( distance[ i ][ j ] > distance[ i ][ k ] + distance[ k ][ j ]
|| distance[ i ][ j ] == -1 ) {
distance[ i ][ j ] = distance[ i ][ k ] + distance[ k ][ j ];
}
}
}
}
}
} int main( ) {
int i, j, k;
int N, M;
long long temp;
scanf("%d %d\n", &N, &M );
for ( i = 1; i <= N; i++ ) {
for ( j = 1; j <= N; j ++ ) {
distance[ i ][ j ] = -1;
}
distance[ i ][ i ] = 0;
}
for ( i = 1; i <= M; i ++ ) {
scanf("%d %d %lld", &j, &k, &temp );
if ( temp < distance[ j ][ k ] || distance[ j ][ k ] == -1 ) {
distance[ j ][ k ] = temp;
distance[ k ][ j ] = temp;
}
}
floyd( N );
for ( i = 1; i <= N; i ++ ) {
temp = 0;
for ( j = 1; j <= N; j ++ ) {
temp += distance[ i ][ j ];
temp %= MOD;
}
printf("%lld\n", temp ); //输入的temp是01 02 03 04最短路径的类加
}
//这题最后输出 7 11 9 11
return 0;
}

【ACM程序设计】求短路 Floyd算法的更多相关文章

  1. Emergency(山东省第一届ACM程序设计真题+Floyd算法变型)

    题目描述 Kudo’s real name is not Kudo. Her name is Kudryavka Anatolyevna Strugatskia, and Kudo is only h ...

  2. HDU 2066 最短路floyd算法+优化

    http://acm.hdu.edu.cn/showproblem.php?pid=206 题意 从任意一个邻居家出发 到达任意一个终点的 最小距离 解析 求多源最短路 我想到的是Floyd算法 但是 ...

  3. 最短路--floyd算法模板

    floyd算法是求所有点之间的最短路的,复杂度O(n3)代码简单是最大特色 #include<stdio.h> #include<string.h> ; const int I ...

  4. 最短路 - floyd算法

    floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...

  5. 【POJ - 3259】Wormholes(最短路 Floyd算法)

    Wormholes 题目描述 教学楼里有很多教室,这些教室由双向走廊连接.另外,还存在一些单向的秘密通道,通过它们可以回到过去.现在有 N (1 ≤ N ≤ 500) 个教室,编号 1..N, M ( ...

  6. 【Aizu - 0189】Convenient Location (最短路 Floyd算法)

    Convenient Location 直接翻译了 Descriptions 明年毕业的A为就业而搬家.就职的公司在若干城市都有办公室,不同天出勤的办公室也不同.所以A在考虑住在哪去各个办公室的时长最 ...

  7. 多源最短路Floyd 算法————matlab实现

    弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计 ...

  8. 多源最短路——Floyd算法

    Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...

  9. 洛谷 P1119 灾后重建 最短路+Floyd算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...

随机推荐

  1. SpringBoot静态资源配置访问上传文件

    使用SpringBoot项目开发上传文件的代码时,如果想访问已上传的文件,但处于测试阶段,而不想配置Nginx服务并启动这么繁琐,那么配置以下代码即可 @Override public void ad ...

  2. Java 中的 final 关键字有哪些用法?

    修饰类:表示该类不能被继承: 修饰方法:表示方法不能被重写: 修饰变量:表示变量只能一次赋值以后值不能被修改(常量).

  3. Linux用户身份与文件权限学习笔记

    用户身份 管理员UID为0:系统的管理员用户 系统用户UID为1~999:服务程序会有独立的系统用户负责运行:防止被黑客入侵进行提权,并有效控制被破坏的范围 普通用户UID从1000开始:是由管理员创 ...

  4. 学习zabbix(四)

    一. 监控知识 1.硬件监控: 机房巡检,远程控制卡,IPMI 2.系统监控: cpu负载查看(指标):uptime(低于3),top(30%-70%), vmstat, mpstat 内存监控: f ...

  5. Netty学习摘记 —— ByteBuf详解

    本文参考 本篇文章是对<Netty In Action>一书第五章"ByteBuf"的学习摘记,主要内容为JDK 的ByteBuffer替代品ByteBuf的优越性 你 ...

  6. Leetcode刷题之螺旋矩阵

    矩阵之螺旋矩阵 总体思路: 注意遍历顺序 每次遍历一圈时候不要多加元素 Leetcode54螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. ...

  7. Kurento安装与入门08——Group Call

    Group Call 本示例展示了一个视频聊天室的功能,不同的聊天室之间互相隔离. 官网文档 Group Call 首先从github上获取代码(如果已经获取可以跳过,获取的代码已经包括后面的示例代码 ...

  8. Android Studio 异常以及解决方案

    1. Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVER ...

  9. 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

    问题描述:在使用python爬取斗鱼直播的数据时,使用str(读取到的字节,编码格式)进行解码时报错:'utf-8' codec can't decode byte 0x8b in position ...

  10. CentOS安装图形界面以及eclipse的安装

    图形界面的安装,以GNOME为例: 1.首先运行命令:yum grouplist 会显示可安装的包,可以自己选择安装. 2.运行  yum gruopinstall "GNOME" ...