FloydWarshallアルゴリズム
8153 ワード
作成日:2022年2月27日午後4:25
FloydWarshallアルゴリズムを三重forゲートで解いた.ここでiは出発位置,jは到着位置である.kは通過する位置です.したがって、dis[i][k]+dis[k][j]は、i,k,jに対応する経路上の費用の和である.
インプリメンテーションコード
# 플로이드 워샬 알고리즘
import sys
sys.stdin = open("input.txt", "rt")
if __name__ == "__main__":
n, m = map(int, input().split())
dis = [[5000 for _ in range(n+1)] for _ in range(n+1)]
# 출발지와 목적지가 같은 경우는 0으로 초기화
for i in range(1, n+1):
dis[i][i] = 0
for i in range(m):
a, b, c = map(int, input().split())
dis[a][b] = c
# 플로이드 워샬 알고리즘
for k in range(1, n+1):
for i in range(1, n+1):
for j in range(1, n+1):
dis[i][j] = min(dis[i][j], dis[i][k]+dis[k][j])
for i in range(1, n+1):
for j in range(1, n+1):
if dis[i][j] == 5000:
print('M', end=' ')
else:
print(dis[i][j], end=' ')
print()
Reference
この問題について(FloydWarshallアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@lsj8706/플로이드-워샬-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol