百俊1956運動
import sys
input = sys.stdin.readline
INF = int(1e9)
v, e = map(int, input().split())
g = [[INF] * v for _ in range(v)]
for _ in range(e):
a, b, c = map(int, input().split())
g[a-1][b-1] = c
for k in range(v):
for i in range(v):
for j in range(v):
g[i][j] = min(g[i][j], g[i][k] + g[k][j])
ans = INF
for i in range(v):
ans = min(ans, g[i][i])
if ans == INF:
print(-1)
else:
print(ans)
最初に記述されたコード(通過):最初は自分へのパスがなく、0に初期化されず、floodとshallを無限に保持すると仮定した.import sys
input = sys.stdin.readline
INF = int(1e9)
v, e = map(int, input().split())
g = [[INF] * v for _ in range(v)]
for _ in range(e):
a, b, c = map(int, input().split())
g[a-1][b-1] = c
for i in range(v):
g[i][i] = 0
for k in range(v):
for i in range(v):
for j in range(v):
g[i][j] = min(g[i][j], g[i][k] + g[k][j])
ans = INF
for i in range(v):
for j in range(v):
ans = min(ans, g[j][i] + g[i][j])
if ans == INF:
print(-1)
else:
print(ans)
直接自分へのパスを無限長に維持し、フロイドと邵爾と、自分->任意のノード->自分へのパス(周期)の最短距離を見つけます.=>どうしてだめなの?
for i in range(v):
for j in range(v):
if i != j:
ans = min(ans, g[j][i] + g[i][j])
このように自分のルートを外せばいいのです自分で0と言ったら...カウントダウン...Reference
この問題について(百俊1956運動), 我々は、より多くの情報をここで見つけました https://velog.io/@gmlwlswldbs/백준-1956-운동テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol