Lua表重写

这应该是一个简单的回溯函数。dest 是一个全局表,在函数中被正确地编辑。prev表应该记录我的以前的位置,以便不再次访问它们。然而,我的prev表总是空的。我是一个新手。如果有其他有用的信息,我将很乐意提供。 u

function GoTo(dest, prev)
    -- 基本情况
    if dest[1] == position[1] and dest[2] == position[2] and dest[3] == position[3] then
        return true
    end
    local prev = prev or {}
    -- 保存目的地,以便不返回这里
    prev[table.concat(position)] = true
    -- 创建下一个移动的键
    local key = {0,0,0}
    for i,v in ipairs(dest) do
        if dest[i] ~= 0 then
            key[i] = dest[i]/math.abs(dest[i])
        end
    end
    -- 试图沿着最佳方向移动
    for i,v in ipairs(key) do
        if key[i] ~= 0 then
            -- 检查下一个移动是否导致访问过的地方
            position[i] = position[i] + v
            local check = prev[table.concat(position)]
            position[i] = position[i] - v
            if not check then
                if moveTo(i,v) then
                    if GoTo(dest, prev) then
                        return true
                    end
                    -- 返回
                    if not moveTo(i, -v) then
                        error("无法回溯")
                    end
                end
            end
        end
    end
end
点赞
用户1442917
用户1442917

你在函数中创建了一个本地变量,并通过传递相同名称的参数进行初始化。这会隐藏函数内部的所有更改,这可能是你没有看到该表格更改的原因。你需要在函数外初始化该表格并传递其值(并删除local prev语句)。

2020-05-12 17:13:19