试图找到最短路径
Attempting to find the shortest path
所以我有以下代码,我认为它会通过节点递归,一旦达到目标,return 最短。但是我遇到了 Stack Overflow。
注意: GetConnectedParts 是 Part 的一种方法,在当前设置下它 return 是每个可访问的节点。
注2: 从头到尾有一条路,实际上是多条路。
我的代码在这里,如果您能提供任何帮助,我将不胜感激:
function FindPath(start, finish, path)
--Define a table to hold the paths
local paths = {}
--Make a default argument
path = path or {start}
--Loop through connected nodes
for i,v in ipairs(start:GetConnectedParts()) do --Overflow occurs here
--Determine if backtracking
local loop = false
for i,vv in ipairs(path) do
if v == vv then
loop = true
end
end
if not loop then
--Make a path clone
local npath = {unpack(path)}
if v == finish then
--If we reach the end add the path
paths[#paths+1] = npath
else
--Otherwise add the shortest part extending from this node
paths[#paths+1] = FindPath(v, finish, npath)
end
end
end
--Find and return the shortest path
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
哇哦。我的问题实际上很容易解决。我没有将零件放在路径本身内。抱歉造成混淆。
所以我有以下代码,我认为它会通过节点递归,一旦达到目标,return 最短。但是我遇到了 Stack Overflow。
注意: GetConnectedParts 是 Part 的一种方法,在当前设置下它 return 是每个可访问的节点。
注2: 从头到尾有一条路,实际上是多条路。
我的代码在这里,如果您能提供任何帮助,我将不胜感激:
function FindPath(start, finish, path)
--Define a table to hold the paths
local paths = {}
--Make a default argument
path = path or {start}
--Loop through connected nodes
for i,v in ipairs(start:GetConnectedParts()) do --Overflow occurs here
--Determine if backtracking
local loop = false
for i,vv in ipairs(path) do
if v == vv then
loop = true
end
end
if not loop then
--Make a path clone
local npath = {unpack(path)}
if v == finish then
--If we reach the end add the path
paths[#paths+1] = npath
else
--Otherwise add the shortest part extending from this node
paths[#paths+1] = FindPath(v, finish, npath)
end
end
end
--Find and return the shortest path
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
哇哦。我的问题实际上很容易解决。我没有将零件放在路径本身内。抱歉造成混淆。