重み付き無向グラフを解くためのダイクストラ法に関するコードのエラー
重み付き無向グラフを解くためにダイクストラ法を実装したプログラムを書いています。
以下の入力で実行するとエラーが起きてしまうのですが、どのように修正するべきかわからず、質問させていただきました。
ダイクストラ法を実装したコード
def shortest_length(G, start):
S = {start:0}; D={}
while len(S)>0:
x = select_min(S);m=S[x];D[x]=m
for (y,w) in edge(G, x):
if y in S:
if S[y]>m+w:
S[y] = m + w
elif y not in D:
S[y] = m + w
print('仮', S, '確定', D)
def select_min(S):
m = -1
for a in S:
if m == -1 or m > S[a]:
x == a
m = S[a]
return x
def edge(G,x):
return ([(b, G[(a,b)])for (a,b) in G if a == x]
+[(a, G[(a,b)]) for (a,b) in G if b == x])
入力
>>> from Dijksta import shortest_length
>>> G = {('A','B'):1, ('A', 'D'):3, ('B', 'D'):3, ('B', 'E'):5, ('C', 'E'):3, ('D', 'E'):1}
>>> shortest_length(G, 'A')
エラー
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/username/Desktop/Dijkstra.py", line 4, in shortest_length
x = select_min(S);m=S[x];D[x]=m
File "/Users/username/Desktop/Dijkstra.py", line 17, in select_min
x == a
NameError: name 'x' is not defined