巡回セールスマンの問題を解決するためにいくつかのアルゴリズムを作成しますが、最初に、n 個のノードを持つグラフ/マップを作成し、すべてのノードには境界線があります。(n=100 の場合、境界線は 99 です)。各ノード間の距離は、1 から 5 までの乱数にする必要があります。
(私はPythonでこれをやっています)私の最初の考えは、各ノードが他のノードまでの距離を持つリスト(最終的なマップはリスト内のリストになります)を持つことでした。10 個のノードの場合、各リストには 9 個の整数が含まれます。
最初のリストを生成した後、他のリストは対応する距離を継承します。元。
A: [5, 5, 3]
B: [5]
C: [5]
D: [3]
次のステップは、要素を 1 つ減らした新しいリストを生成し、それを既存の値の後ろに配置して、上記と同じことを行うことです (残りのノードは対応する距離を継承します)。これは、すべてのリストがいっぱいになるまで再帰的に行われます。
最終的なリストは、次のようなリストになります。
[[5, 5, 3],
[5, 2, 1],
[5, 2, 4],
[3, 1, 4]
誰かがこれを実装する方法のヒントを教えてくれますか? あるいは、もっと簡単な方法があれば。ありがとう!
インポートランダム
def main():
graph_map = []
max_nodes = 10
i = 0
generate_map(graph_map, max_nodes, i)
print graph_map
def generate_map(graph_map, max, i):
temp_list = []
for j in range(max-1):
temp_list.append(random.randint(1, 5))
if i > 0:
graph_map[i].append(temp_list)
else:
graph_map.append(temp_list)
for j in range(1, max):
graph_map.append([temp_list[j-1]])
if __name__ == '__main__':
main()
このコードは、サンプル出力で私が望んでいた開始を提供します。
[[4, 5, 5, 2, 1, 3, 3, 3, 2], [4], [5], [5], [2], [1], [3], [3], [3], [2]]