试图找到最短路径。

我有以下代码,我认为会递归遍历节点,一旦到达目标,就会返回最短路径。但我得到了“堆栈溢出”的错误。

注: GetConnectedParts是Part的一个方法,根据当前设置,它返回每个可访问节点。

注2: 从起点到终点确实有路径,实际上有多条。

我的代码在这里,非常感谢您提供的任何帮助:

function FindPath(start, finish, path)
    --定义一个表来保存路径
    local paths = {}
    --设置默认参数
    path = path or {start}
    --循环遍历连接的节点
    for i,v in ipairs(start:GetConnectedParts()) do --超出限制在此处发生
        --确定是否回溯
        local loop = false
        for i,vv in ipairs(path) do
            if v == vv then
                loop = true
            end
        end
        if not loop then
            --复制路径
            local npath = {unpack(path)}
            if v == finish then
                --如果到达终点,则添加路径
                paths[#paths+1] = npath
            else
                --否则添加从该节点延伸的最短部分
                paths[#paths+1] = FindPath(v, finish, npath)
            end
        end
    end
    --查找并返回最短路径
    local lengths = {}
    for i,v in ipairs(paths) do
        lengths[#lengths+1] = #v
    end
    local least = math.min(unpack(lengths))
    for i,v in ipairs(paths) do
        if #v == least then
            return v
        end
    end
end
点赞
用户3979429
用户3979429

哇哦。我的问题实际上很容易解决。我没有将部件放在路径本身中。对于造成的混乱,抱歉。

2016-01-17 03:07:26