在 NetworkX 2.6 版本中,'traveling_salesman_problem' 方法已被移除。您可以使用 'nx.approximation.traveling_salesman_problem' 方法来解决这个问题。在新版本中,该方法接受一个图对象和一个起点节点作为参数,返回一个最短路径的列表。

以下是修改后的代码:

import networkx as nx

# 定义景点距离矩阵
distances = [
    [0, 300, 360, 210, 530, 475, 500],
    [300, 0, 380, 270, 230, 285, 200],
    [360, 380, 0, 510, 230, 665, 490],
    [210, 270, 510, 0, 470, 265, 450],
    [530, 230, 230, 470, 0, 515, 260],
    [475, 285, 665, 265, 515, 0, 460],
    [500, 200, 490, 450, 260, 460, 0]
]

# 创建图
G = nx.Graph()

num_nodes = len(distances)

# 添加节点和边
for i in range(num_nodes):
    G.add_node(i)

for i in range(num_nodes):
    for j in range(num_nodes):
        if i != j:
            G.add_edge(i, j, weight=distances[i][j])

# 定义起点和终点
start_node = 0
end_node = num_nodes - 1

# 寻找从起点到终点,经过所有景点一次的最短路径
shortest_path = nx.approximation.traveling_salesman_problem(G, source=start_node)

# 计算最短路径长度
path_length = sum(G[shortest_path[i]][shortest_path[i + 1]]['weight'] for i in range(num_nodes - 1))

print("最短路径:", shortest_path)
print("最短路径长度:", path_length)

在修改后的代码中,我们使用了 'nx.approximation.traveling_salesman_problem' 方法,并将起点节点作为参数传递给它。这将返回一个最短路径的列表,您可以使用它来计算最短路径的长度。

NetworkX Traveling Salesman Problem 错误:'cycle_nodes' 参数错误

原文地址: https://www.cveoy.top/t/topic/fPRK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录