You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}")

代码细节说明

  1. 格式转换:因为你提供的点是字符串格式(比如"2.5 3.6"),所以先转成浮点数列表方便计算;如果你的点本来就是数值型列表/元组,可以直接去掉转换代码。
  2. 访问记录:用set存储已访问点的元组形式,确保不会重复选择同一个点。
  3. 循环查找:每次循环遍历剩余点,计算距离并筛选出最近点,然后更新路径和当前点,直到所有点都被处理。

测试输出

运行代码后会得到符合逻辑的遍历结果:

遍历路径:
第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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:48:58