【ACM程序设计】求短路 Floyd算法
最短路
floyd算法
- floyd是一个基于贪心思维和动态规划思维的计算所有点到所有点的最短距离的算法。

对于每个顶点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算法的更多相关文章
- Emergency(山东省第一届ACM程序设计真题+Floyd算法变型)
题目描述 Kudo’s real name is not Kudo. Her name is Kudryavka Anatolyevna Strugatskia, and Kudo is only h ...
- HDU 2066 最短路floyd算法+优化
http://acm.hdu.edu.cn/showproblem.php?pid=206 题意 从任意一个邻居家出发 到达任意一个终点的 最小距离 解析 求多源最短路 我想到的是Floyd算法 但是 ...
- 最短路--floyd算法模板
floyd算法是求所有点之间的最短路的,复杂度O(n3)代码简单是最大特色 #include<stdio.h> #include<string.h> ; const int I ...
- 最短路 - floyd算法
floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...
- 【POJ - 3259】Wormholes(最短路 Floyd算法)
Wormholes 题目描述 教学楼里有很多教室,这些教室由双向走廊连接.另外,还存在一些单向的秘密通道,通过它们可以回到过去.现在有 N (1 ≤ N ≤ 500) 个教室,编号 1..N, M ( ...
- 【Aizu - 0189】Convenient Location (最短路 Floyd算法)
Convenient Location 直接翻译了 Descriptions 明年毕业的A为就业而搬家.就职的公司在若干城市都有办公室,不同天出勤的办公室也不同.所以A在考虑住在哪去各个办公室的时长最 ...
- 多源最短路Floyd 算法————matlab实现
弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计 ...
- 多源最短路——Floyd算法
Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...
- 洛谷 P1119 灾后重建 最短路+Floyd算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...
随机推荐
- java-設計模式-原型模式
原型模式 是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类. 問題: 如果我們要複製一個類實例: 首先, 你必须新建一个属于相同类的对象. 然后, 你必须遍历原始对象的所 ...
- Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度
1 Long[] numbers; //一般使用的定义方式,可分为静态和动态两种定义方式,下有说明. 2 Long numbers[]; //跟上面用法一致. 3 Long... numbers; / ...
- forward和redirect的区别?http状态码301,302分别代表什么?
一.forward和redirect的区别 从地址栏显示来说:forward是服务器内部重定向,客户端浏览器的网址不会发生变化:redirect发生一个状态码,告诉服务器去重新请求那个网址,显示的的新 ...
- python办公自动化系列之金蝶K3(三)
小爬在之前的两篇文章 [python办公自动化系列之金蝶K3自动登录(一)].[python办公自动化系列之金蝶K3自动登录(二)]带大家系统搞定了K3客户端的自动登录难题,但是搞定[自动登录]只是我 ...
- Lambda8 表达式
Lambda 表达式 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构. JDK 也提 ...
- InfoQ Trends Report
InfoQ Trends Report InfoQ Trends Report Culture & Methods Trends Report - March 2021 DevOps and ...
- Socket.io+Notification实现浏览器消息推送
前言 socket.io: 包含对websocket的封装,可实现服务端和客户端之前的通信.详情见官网(虽然是英文文档,但还是通俗易懂).Notification: Html5新特性,用于浏览器的桌面 ...
- 子线程中如何修改ui界面
1.Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view包 ...
- 访问控制中默认,public,private,protected区别?
2.继承的访问控制: (比如一个类中的protected成员对于"不同的包中的非子类"是不可见的. 说明:1.任何public的内容可以被从任何地方访问. 2.private的成员 ...
- 启动两个jboss需要修改的端口号 (两个不能相同)
standalone-configuration-standalone.xml