aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

abc 079 d 'Wall' (python)

ほかっておいた蟻本の2-5章を進め始めた
蟻本がC+で書かれていても、先人の方々が python のコードをまとめてくださっているので独学でもなんとか耐えている
神サイト
蟻本 初級編 python カテゴリーの記事一覧 - じゅっぴーダイアリー

今回はワーシャルフロイド法の練習
入力をうまくワーシャルフロイド法に当てはめていければ簡単
ワーシャルフロイド法自体は一回だけ使うようにして、全部の最短距離のリストを出しておいて、一つ一つリストから d[Aij][1] を足していかないと TLE する

def warshall_floyd(d):
    for k in range(10):
        for i in range(10):
            for j in range(10):
                d[i][j] = min(d[i][j],d[i][k] + d[k][j])
    return d

w,h = map(int,input().split())

d = [[10**4]*10 for i in range(10)] 
for i in range(10):
    a = list(map(int,input().split()))
    for j in range(10):
      d[i][j] = a[j]
for i in range(10):
    d[i][i] = 0
    
ans = 0
chk = tuple(warshall_floyd(d))
for _ in range(w):
  c = list(map(int,input().split()))
  for i in c:
    if i != 1 and i != -1:
      ans += chk[i][1]
      
print(ans)