例题
给五个坐标,绘制一系列的直线(路径),从原点出发,包含五个xy点,再回到原点。输出最小的路径长度
代码使用例
import itertools
import math
# 计算两点之间的欧几里得距离
def distance(point1, point2):
return math.sqrt((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2)
# 计算一条路径的总长度
def total_path_length(path):
length = 0
# 计算路径中的相邻点的距离
for i in range(len(path) - 1):
length += distance(path[i], path[i + 1])
return length
# 给定的5个坐标点
coordinates = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
# 原点
origin = (0, 0)
# 生成所有点的排列组合(包括原点)
permutations = itertools.permutations(coordinates)
# 初始化最短路径长度为无穷大
min_length = float('inf')
# 遍历所有路径(从原点出发,经过5个点并回到原点)
for perm in permutations:
# 在路径开头插入原点,在末尾添加原点
path = [origin] + list(perm) + [origin]
# 计算该路径的总长度
length = total_path_length(path)
# 更新最短路径
if length < min_length:
min_length = length
# 输出最短路径长度
print(f"最短路径长度: {min_length:.2f}")