所以我有以下代码,我认为它会通过节点递归,一旦达到目标,返回最短的代码。但是我得到Stack Overflow。
注意: GetConnectedParts是Part的一种方法,当前设置返回每个可访问节点。
注意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
答案 0 :(得分:0)