Python实现依次查找最近XY点路径的技术求助
实现依次查找最近点的路径逻辑
没问题,这就帮你搞定这个「贪心式」的最近邻遍历逻辑!咱们先理清楚思路,再直接上可运行的代码。
核心思路
咱们要做的其实是贪心算法里的最近邻路径查找,步骤非常清晰:
- 维护一个「已访问点」集合,避免重复选择同一个点
- 从给定起点出发,每次在剩余未访问点中找到距离当前点最近的那个
- 把这个点加入路径、标记为已访问,再将当前点更新为这个新点
- 重复上述步骤,直到所有点都被遍历完毕
完整代码实现
你已经写好了距离计算函数,咱们直接补全主逻辑:
import math def dist(p1, p2): return math.sqrt((p2[0] - p1[0]) ** 2 + (p2[1] - p1[1]) ** 2) def find_nearest_path(start_point, points_list): # 把字符串格式的点转成浮点数列表(如果你的点已经是数值型可跳过) processed_points = [list(map(float, point.split())) for point in points_list] start = list(map(float, start_point.split())) path = [start] # 存储最终遍历路径,先加入起点 visited = set() # 记录已访问点(用tuple存,因为list不能哈希) visited.add(tuple(start)) current_point = start remaining_points = processed_points.copy() while remaining_points: # 遍历未访问点,找到距离当前点最近的那个 nearest_point = None min_distance = float('inf') for point in remaining_points: point_tuple = tuple(point) if point_tuple not in visited: distance = dist(current_point, point) if distance < min_distance: min_distance = distance nearest_point = point # 更新路径、访问记录和当前点 path.append(nearest_point) visited.add(tuple(nearest_point)) remaining_points.remove(nearest_point) current_point = nearest_point return path # 用你的测试数据验证 if __name__ == "__main__": points = ["9.5 7.5", "10.2 19.1", "9.7 10.2", "2.5 3.6", "5.5 6.5", "7.8 9.8"] start = ["2.2 4.6"] # 取列表中的起点字符串 result = find_nearest_path(start[0], points) print("遍历路径:") for idx, point in enumerate(result): print(f"第{idx+1}个点:{point}")
代码细节说明
- 格式转换:因为你提供的点是字符串格式(比如
"2.5 3.6"),所以先转成浮点数列表方便计算;如果你的点本来就是数值型列表/元组,可以直接去掉转换代码。 - 访问记录:用
set存储已访问点的元组形式,确保不会重复选择同一个点。 - 循环查找:每次循环遍历剩余点,计算距离并筛选出最近点,然后更新路径和当前点,直到所有点都被处理。
测试输出
运行代码后会得到符合逻辑的遍历结果:
遍历路径: 第1个点:[2.2, 4.6] 第2个点:[2.5, 3.6] 第3个点:[5.5, 6.5] 第4个点:[7.8, 9.8] 第5个点:[9.5, 7.5] 第6个点:[9.7, 10.2] 第7个点:[10.2, 19.1]
内容的提问来源于stack exchange,提问作者Messak
相关产品推荐
相关产品推荐

