尋找圖的路徑之尋路算法

--到地圖去的關(guān)系表
local tbToMap = {}
tbToMap[1000] = {1001,1003,1010}
tbToMap[1001] = {1000,1002,1004,1009}
tbToMap[1002] = {1005,1001,1009}
tbToMap[1003] = {1000,1006,1004}
tbToMap[1004] = {1007,1001,1003,1005}
tbToMap[1005] = {1002,1004,1011}
tbToMap[1006] = {1003,1007}
tbToMap[1007] = {1004,1006,1008}
tbToMap[1008] = {1007}
tbToMap[1009] = {1001,1002,1010}
tbToMap[1010] = {1009,1000}
tbToMap[1011] = {1005}

local tbResult = {}--所有遍歷結(jié)果

local FIRID = 1008
local LASID = 1002
local tbGoBy = {}--走過(guò)的路
local tbBlindAlley = {}--死路節(jié)點(diǎn)

local num = 0
local maxRecursionNum = 100--最大遞歸上限

local g_findOver = false

local function findMapPath(_firstId,_lastId)
    num = num + 1
    if num > maxRecursionNum then--遞歸超過(guò)上限
        return
    end

    print(_firstId, "_firstId = ")
    tbGoBy[_firstId] = true
    table.insert(tbResult, _firstId)
    if _firstId == _lastId then
        return
    else
        local dt = tbToMap[_firstId]
        for k, v in ipairs(dt) do
            if not tbGoBy[v] then
                local value = findMapPath(v, _lastId)
                print(value, "value = ")
                if value == nil then
                    return
                end
            end
        end

        --if not g_findOver then
            tbBlindAlley[_firstId] = true
        --end
        return _firstId
    end
end
--findMapPath(1008,1010)
findMapPath(1006,1009)
--findMapPath(1006,1002)

dump(tbBlindAlley, "tbBlindAlley = ")
print(num, "num = ")

dump(tbResult, "tbResult = ")

for i = #tbResult, 1, -1 do
    local mapId = tbResult[i]
    if tbBlindAlley[mapId] then
        table.remove(tbResult, i)
    end
end

dump(tbResult, "tbResult = ")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容