辞書の中でキーxからキーyに至る最速の方法を、それらのすべてが配列値を介して接続されていると仮定して、どのようにするか。辞書のxキーからyキーまでの最速ルートを決定する?
network={
1: [3],
2: [4],
3: [1, 8, 7, 6, 4],
4: [2, 3, 6, 5],
5: [4, 11, 10],
6: [3, 11, 4],
7: [3, 8, 11],
8: [3, 16, 9, 7],
9: [8, 16, 14, 11],
10: [5, 11, 13],
11: [5, 6, 7, 9, 14, 10],
12: [13],
13: [10, 14, 12],
14: [9, 16, 13, 11],
15: [16],
16: [8, 15, 14, 9]}
キーは値xまたはyを表します。そしてそれらの配列は、すべて互いに接続されています。例:1
は3
に接続され、3
は接続されています1, 8, 7, 6, 4
escです。
xからyにジャンプするジャンプ数を与える関数を作成しました。
def jumps(x, y, network):
x={x}
for i in range(1, len(network)):
x=neighbors(x, network)
if(y in x):
return i
def neighbors(x, network):
seen=[]
for krizisce in x:
for izvoz in network[krizisce]:
if izvoz not in doslej and izvoz not in seen:
seen.append(izvoz)
return {x for x in seen}
しかし、私はxからyまでのキーの最短配列を取得したいと思います。私はお互いなどから離れている2つの値を選択する場合たとえば、
は:1
と15
私は1 -> 15
から最短パスを取得したいのですが。そうでしょう[1, 3, 8, 16, 15]
です:https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
あなたは高速な実装が必要な場合は、これはあなたの実装をたくさん似ているようです。 – erip
幅優先探索の実装を探してください – DAle