2017-09-04 106 views
0
x = {'d': (4, 2), 'b': (4, 4), 'c': (2, 2), 'a': (4, 0)} 

ユークリッド距離を使用して、リストが始まると仮定して、ある座標から次の座標までの最も近い距離に基づいてソートされた辞書のリストを取得する方法d?理由はaは、d座標a次に、座標を含む辞書内の残りの座標と比較する第二の基準点になり、座標までの最短距離を有する座標['d', 'a', 'c', 'b']ループで最も近い座標を見つける(Python)

リストは次のようになりますcおよびb。座標cは座標aに最も近い座標であることがわかります。このプロセスは、辞書内に基準点がなくなるまで続けられる。

+0

*「1つの座標から次の座標までの最短距離」* - 何に基づいていますか?私はあなたの結果のリストを理解していない。私はあなたが「d」から「b」、「b」から「c」、「c」から「a」までの距離に基づいてソートしたいと思っていましたが、その元のリストはそのように正しくソートされていました。 「d」からノード「b」、「c」、および「a」までの距離も、その結果を与えない。 –

+0

また、使用している言語にタグを付けます。そうしないと、実行する必要がある論理的なステップについての回答が得られます。 –

+0

@SpencerWieczorek謝罪、私は私の質問を編集しました。それを見てください –

答えて

0

辞書は定数です。 find_closest関数にパス['d']と残りのセット(['a'、 'b'、 'c'])を渡します。 path[-1]から残りのセットの各ポイントまでの距離を見て、セットからセットの最後まで勝者を移動します。セットが空になるまでループします。

+0

これは私の意図ですが、私はループを書くことが困難です –

0

、Dを調整する最短距離を持っている

いいえ、あなたの例で座標を見て、& C B、すなわち2 Dから等距離にあるため、複数の有効な解決策がある座標:

from math import sqrt 

def distance(p): 
    p1, p2 = points[p] 
    q1, q2 = points[path[-1]] 

    return sqrt((q1 - p1) ** 2 + (q2 - p2) ** 2) 

points = {'d': (4, 2), 'b': (4, 4), 'c': (2, 2), 'a': (4, 0)} 

path = ['d'] # assuming the list starts from d 

while len(path) < len(points): 
    path.append(sorted([point for point in points if point not in path], key=distance)[0]) 

print(path) 

OUTPUT

> python3 test.py 
['d', 'b', 'c', 'a'] 
> 
関連する問題