【算法】图论 —— Floyd算法 python

洛谷 B3647 【模板】Floyd

题目描述

给出一张由 n n n 个点 m m m 条边组成的无向图。

求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。

输入格式

第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。

接下来 m m m 行,每行三个整数 u , v , w u,v,w u,v,w,代表 u , v u,v u,v 之间存在一条边权为 w w w 的边。

输出格式

输出 n n n 行每行 n n n 个整数。

第 i i i 行的第 j j j 个整数代表从 i i i 到 j j j 的最短路径。

输入输出样例 #1

输入 #1

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

输出 #1

0 1 2 1
1 0 1 2
2 1 0 1
1 2 1 0

说明/提示

对于 100 % 100\% 100% 的数据, n ≤ 100 n \le 100 n≤100, m ≤ 4500 m \le 4500 m≤4500,任意一条边的权值 w w w 是正整数且 1 ⩽ w ⩽ 1000 1 \leqslant w \leqslant 1000 1⩽w⩽1000。

数据中可能存在重边。


AC_code

python 复制代码
n, m = map(int, input().split())  
dp = [[float('inf')] * (n + 1) for _ in range(n + 1)]  
for i in range(1, n + 1):  
    dp[i][i] = 0  
for _ in range(m):  
    u, v, w = map(int, input().split())  
    dp[u][v] = dp[v][u] = min(dp[u][v], w)  
for k in range(1, n + 1):  
    for i in range(1, n + 1):  
        for j in range(1, n + 1):  
            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j])  
for row in dp[1:]:  
    print(" ".join(map(str, row[1:])))

实战演练

城市间的交易


AC_code

python 复制代码
n, m = map(int, input().split())  
dp = [[float('inf')] * (n + 1) for _ in range(n + 1)]  
res = [[0] * (n + 1) for _ in range(n + 1)]  
for i in range(1, n + 1):  
    dp[i][i] = 0  
a, p, s = [0] * (n + 1), [0] * (n + 1), [0] * (n + 1)  
for i in range(1, n + 1):  
    a[i], p[i], s[i] = map(int, input().split())  
for _ in range(m):  
    u, v, w = map(int, input().split())  
    dp[u][v] = dp[v][u] = min(dp[u][v], w)  
for k in range(1, n + 1):  
    for i in range(1, n + 1):  
        for j in range(1, n + 1):  
            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j])  
# res[i][j]表示一个城市i的物品运输到城市j的最大利润  
for i in range(1, n + 1):  
    for j in range(1, n + 1):  
        res[i][j] = s[j] - dp[i][j] - p[i]  
ans = 0  
for i in range(1, n + 1):  
    cur = 0  
    for j in range(1, n + 1):  
        cur = max(cur, a[i] * res[i][j])  
    ans += cur  
print(ans)

END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

相关推荐
waves浪游2 分钟前
vector详解
c语言·开发语言·数据结构·c++·算法
猿毕设24 分钟前
【FL0090】基于SSM和微信小程序的球馆预约系统
java·spring boot·后端·python·微信小程序·小程序
小馒头学python25 分钟前
蓝耘元生代|调用Deepseek API提升数据集多样性:数据增强实践
python
溟洵29 分钟前
【C/C++算法】从浅到深学习--- 位操作算法(图文兼备 + 源码详解)
c语言·c++·算法
机器学习之心41 分钟前
JCRQ1河马算法+四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测
算法·cnn·gru·cnn-gru·四模型多变量时序预测
Python数据分析与机器学习1 小时前
《基于大数据的相州镇新农村商务数据分析与研究》开题报告
大数据·人工智能·python·算法·数据挖掘·数据分析
BingLin-Liu1 小时前
第十四届蓝桥杯:(二分算法)字串简写
算法
楼台的春风1 小时前
【高斯滤波器(Gaussian Filter)详解】
图像处理·人工智能·opencv·算法·计算机视觉·matlab·嵌入式
changwan1 小时前
Milvus向量数据库部署
python·llm·openai
数据攻城小狮子1 小时前
深入探究Python机器学习算法:无监督学习(聚类算法如 K-Means、DBSCAN,降维算法如 PCA、SVD)
python·算法·机器学习·聚类·sklearn·k-means