|
楼主 |
发表于 2017-7-18 09:38:30
|
显示全部楼层
visited={}
for i=1 ,countTab(newrooms) do
visited[i]=false --初始化所有节点未曾访问
end
这是736--793 的数据。。帮看看
if not visited[1] then
FastDFS(myrt,1) --计算起点的连通图
end
for i=1 ,countTab(newrooms) do
if visited[i]==false then--未曾访问的节点测试一下跟第一个起点的连通性,如果能联通,则递归这个节点
local path, len = map:getPath(myrt[1].index,myrt[i].index)
if path then
FastDFS(myrt,i) --继续遍历指定的myrt[i]这个节点
--messageShow("发现通路,遍历下一个节点!通路长度="..len,"red")
end
end
end
--messageShow("【"..job.name.."】深度优先计算结束,遍历【"..roomsnum.."】个房间,用时【"..os.clock()-starttime.."】秒","SandyBrown")
end
function FastDFS(myrt,i)
visited[i] = true --设置下标为I的顶点为已访问
--Note("myrt["..i.."]="..myrt[i].index) --输出顶点信息
table.insert(road.rooms,myrt[i].index)
local p = myrt[i].pnext --下一个边表结点
if p==nil then return end
while p~=nil do
if(not visited[p.index]) then--如果是未访问的则递归
visited[p.index]=true
FastDFS(myrt,p.index)
end
p = p.pnext
end
end
function dfs(from)
for i=1,countTab(tmp.to) do
if not tmp.to then
break
end
local l_dest,l_p=getNearRoom(from,tmp.to)
if l_dest then
local l_check = true
for v in pairs(road.rooms) do
if v==l_dest then
l_check = false
end
end
if l_check then
local path, len = map:getPath(from,l_dest)
if path then
table.insert(road.rooms,l_dest)
table.remove(tmp.to,l_p)
dfs(l_dest)
end
end
end
end
end
function search()
--Note("run search")
tmp.find = true
if flag.find==1 then return end
searchPre()
cntr1 = countR(15)
exe('look;halt')
return check_halt(searchStart,1)
end
|
|