找回密码
 注册
搜索
楼主: fqyy@tj

mush路径构建的核心哪位大神给解读一下

[复制链接]
门派:古墓派
 楼主| 发表于 2017-4-29 11:31:34 | 显示全部楼层

你发这是如果是数值返回数值,如果是字符串或者函数就返回字符串或者函数的返回值,当然没问题。
问题是深度搜索函数里我发的这个并没有多数值进行权重处理。
local routeLength = map.rooms[roomid]:length(route)
if routeLength then
if v==link_way then
    node = List.addNode(node,List.new(k))
end
end
这个结果就是你赋值50和5没区别,只要有值就加入到表里
门派:华山派
发表于 2017-4-29 11:58:14 | 显示全部楼层
本帖最后由 xyxs@tj 于 2017-4-29 12:04 编辑

local routeLength = map.rooms[roomid]:length(route)只是判断路径通不通
搜索范围是local rooms = getAroundRooms(p_room,p_dest,l_distance,'all')
l_distance是搜索的范围
在范围内的room都会被放到local rooms里面
第一次搜索,lengths返回50,大于l_distance,那么zsl不会放进搜索rooms列表里面
第二次搜索,lengths返回3,如果小于等于l_distance,那么zsl就会放进搜索rooms列表
门派:华山派
发表于 2017-4-29 12:26:38 | 显示全部楼层
本帖最后由 xyxs@tj 于 2017-4-29 12:27 编辑

大昏这版的dfs搜索代码已经很高效,这块代码基本不需要再优化了
zsl就一个room,lengths为3,一般情况下是不会出现从中间穿过去的路径走法
通常跑进zsl是因为在搜索范围内
一次搜索的效率肯定比两次高
现在已经用dfs把搜索路径优化了,不会走多余的路
那么就算第一次搜索把明教地图全跑一遍,只要能找到目标npc,
也要比第一次搜索找不到目标,然后再从头再找一遍效率高
我搞不懂为什么你们想在第一次搜索把zsl排除在外
门派:古墓派
 楼主| 发表于 2017-4-29 12:32:53 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 11:58
local routeLength = map.rooms[roomid]:length(route)只是判断路径通不通
搜索范围是local rooms = getAr ...

你去找找哪里有l_distance和lengths的判断语句,

正因为没有我才想优化在哪里加
门派:华山派
发表于 2017-4-29 12:35:43 | 显示全部楼层
fqyy@tj 发表于 2017-4-29 12:32
你去找找哪里有l_distance和lengths的判断语句,

正因为没有我才想优化在哪里加
  1. function getAroundRooms(name, city, length, type)
  2.         local rooms = getRooms(name, city, type)
  3.         local allRooms = {}
  4.         for _, id in pairs(rooms) do
  5.                 local aroundRooms = map:getAroundRooms(id, length)
  6.                 for _, aroundRoom in pairs(aroundRooms) do
  7.                         if not map.rooms[aroundRoom].nofind then
  8.                                 allRooms[aroundRoom] = true
  9.                         end
  10.                 end
  11.         end
  12.         return allRooms
  13. end
复制代码


你到底要判断什么啊?
门派:古墓派
 楼主| 发表于 2017-4-29 12:41:49 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 12:26
大昏这版的dfs搜索代码已经很高效,这块代码基本不需要再优化了
zsl就一个room,lengths为3,一般情况下是 ...

我想实现的就是你说的这个,但现在公版真的不是你想的那样。或许你用的和我们是不同的版本
门派:古墓派
 楼主| 发表于 2017-4-29 12:44:21 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 12:35
你到底要判断什么啊?

你找的这是l_distance这个的判断,你仔细看看,l_distance是6就是找6步内的房间加入一个数组里。
然而并没有判断这个房间lengths的值,所以你紫衫林的lengths=3没什么用。还是会被放入查找列表里
门派:华山派
发表于 2017-4-29 12:48:18 | 显示全部楼层
版聊真累啊!

getAroundRooms函数取出所有在搜索范围内的room
这个搜索范围就是searchPre函数前面设置的local l_distance = 6
如果起始room到目标room的lengths之和<=l_distance
那么这个目标room就在搜索范围内
就会被getAroundRooms函数取出来,放入rooms里面
fastdfs再对rooms进行处理,以获得最优的搜索路径,少走冤枉路

门派:华山派
发表于 2017-4-29 12:51:28 | 显示全部楼层
本帖最后由 xyxs@tj 于 2017-4-29 12:57 编辑
fqyy@tj 发表于 2017-4-29 12:44
你找的这是l_distance这个的判断,你仔细看看,l_distance是6就是找6步内的房间加入一个数组里。
然而并 ...


6步指的就是lengths值呀
你以为一个room算一步啊?
当然如果room没指定lengths值,默认就是1,就是一步

门派:古墓派
 楼主| 发表于 2017-4-29 13:10:49 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 12:51
6步指的就是lengths值呀
你以为一个room算一步啊?
当然如果room没指定lengths值,默认就是1,就是一 ...

你不理解,我也不多说了,我已经改完了正在运行,等晚上看结果吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-16 14:53 , Processed in 0.045529 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表