迪克斯特拉算法(查找最短路径)

local Graph = {
["乐谱"] = {["海报"] = 0, ["黑胶唱片"] = 5},
["海报"] = {["低音吉他"] = 30, ["架子鼓"] = 35},
["黑胶唱片"] = {["架子鼓"] = 20, ["低音吉他"] = 15},
["低音吉他"] = {["钢琴"] = 20},
["架子鼓"] = {["钢琴"] = 10},
}

local Result = {
["乐谱"] = {0, "self"},
["海报"] = {999999, "NONE"},
["黑胶唱片"] = {999999, "NONE"},
["低音吉他"] = {999999, "NONE"},
["架子鼓"] = {999999, "NONE"},
["钢琴"] = {999999, "NONE"}
}

local Num07 = {}

function Num07:findRoute(tab, key, parent)
if tab[key] then
else
return
end
local group = tab[key]
local tmpTableKey = {}
local tmpTableValue = {}
for k,v in pairs(group) do
table.insert(tmpTableKey, #tmpTableKey + 1, k)
table.insert(tmpTableValue, #tmpTableValue + 1, v)
end
local tmpValue = -999999
local tmpKey = "NONE"
for i = 1, #tmpTableKey do
-- print(tmpTableValue[i])
for j = 1,#tmpTableKey - i do
if tmpTableValue[j] > tmpTableValue[j + 1] then
tmpValue = tmpTableValue[j]
tmpTableValue[j] = tmpTableValue[j + 1]
tmpTableValue[j + 1] = tmpValue
tmpKey = tmpTableKey[j]
tmpTableKey[j] = tmpTableKey[j + 1]
tmpTableKey[j + 1] = tmpKey
end
end
end
for i = 1, #tmpTableKey do
-- print(tmpTableValue[i])
end
-- 以上先进行了一次排序操作
for i=1, #tmpTableKey do
-- print(tmpTableKey[i])
local parentValue
if Result[parent] then
parentValue = Result[parent][1]
else
parentValue = 0
end
-- print(Result[tmpTableKey[i]][1] .. "当前距离")
if Result[tmpTableKey[i]][1] > parentValue + tmpTableValue[i] then

local parent = Result[tmpTableKey[i]][2]

Result[tmpTableKey[i]][1] = tmpTableValue[i] + parentValue
Result[tmpTableKey[i]][2] = key
end
end
-- 以上进行了第一轮的赋值操作
for i=1, #tmpTableKey do
self:findRoute(tab, tmpTableKey[i], tmpTableKey[i])
end
end

function Num07:printRoute()
for k,v in pairs(Result) do
print(k .. " " .. " " .. v[1] .. " " .. v[2])
end
end

Num07:findRoute(Graph, "乐谱", "乐谱")

Num07:printRoute()

猜你喜欢

转载自www.cnblogs.com/BXLH/p/10857170.html