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

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

[复制链接]
门派:天龙寺
发表于 2017-4-29 03:04:14 | 显示全部楼层

再问个问题
  1. Room {
  2.         id = "huashan/shulinnn",
  3.         name = "松树林",
  4.         ways = {
  5.                 ["#hsssl"] = "huashan/shiwu",
  6.         },
  7.         nolooks = {
  8.                 ["#hsssl"] = true,
  9.                 ["south"] = true,
  10.                 ["east"] = true,
  11.                 ["north"] = true,
  12.                 ["west"] = true,
  13.         },
  14.         lengths = {
  15.                 ["#hsssl"] = 50,
  16.         },
  17.         find = {
  18.                 path = {"n;w"}, count = 20,
  19.         },
  20. }
复制代码

这个里面#hsssl 是不是就直接调用hsssl的function了?
门派:古墓派
 楼主| 发表于 2017-4-29 07:13:17 | 显示全部楼层
我这贴越走越高端了,算法、数据结构,无向图,链表,邻接表,有向图,搞通了,大学学的就没都还给老师
门派:古墓派
 楼主| 发表于 2017-4-29 07:22:46 | 显示全部楼层
modman@tj 发表于 2017-4-29 03:04
再问个问题

这个里面#hsssl 是不是就直接调用hsssl的function了?

上lujing.lua里找hsssl
门派:古墓派
 楼主| 发表于 2017-4-29 08:12:28 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 02:12
50是出zsl的权重
进去的权重我看了一下是3

看来看去room里的lengths 只判断了返回值的真假,并没有考虑到数值大小啊。所以赋值3或者50也没啥意义吧?只有返回false才有闭合路径的意义吧?
                                        local routeLength = map.rooms[roomid]:length(route)
                                        if routeLength then
                                                if v==link_way then
                                                        node = List.addNode(node,List.new(k))
                                                end
                                        end
门派:古墓派
 楼主| 发表于 2017-4-29 08:14:58 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 01:59
在下定论前请先自己测试一下
别人测试得出的结论,你凭自己的臆想就能完全否定掉
这是搜索的room列表, ...

sz 的算法和find 不一样 ,sz是直接最短路径,所以没紫衫林什么事,find就不一样了,find要搜索每一个房间,所以搜索练武场和长廊很容易就先进紫衫林了
门派:不明
发表于 2017-4-29 09:55:10 | 显示全部楼层
modman@tj 发表于 2017-4-29 02:04
不要动气 ,我也正在看这里的代码。。。没那么熟
可是,我每次wd练武场,都会走到zsl

是的,我碰到的每次练武场,必入zsl,我还以为明教地图就这样呢,当时还想怪不得明教人气不旺,这么复杂的地图。。。
门派:华山派
发表于 2017-4-29 10:13:27 | 显示全部楼层
fqyy@tj 发表于 2017-4-29 08:14
sz 的算法和find 不一样 ,sz是直接最短路径,所以没紫衫林什么事,find就不一样了,find要搜索每一个房 ...

find按照什么去搜索房间呢
fastdfs函数最终生成的road.rooms打印出来就是我前面贴的搜索的room列表
然后就是根据最短的路径跑遍这些room
zsl的lengths是3一般情况下肯定大于其他路径
所以除非代码有问题,基本不会穿过zsl去其他room

如果zsl在搜索范围内,那么road.rooms里面会有zsl这个room
最终肯定会进zsl搜索
这个我前面已经解释过了
门派:华山派
发表于 2017-4-29 10:17:06 | 显示全部楼层
fqyy@tj 发表于 2017-4-29 08:12
看来看去room里的lengths 只判断了返回值的真假,并没有考虑到数值大小啊。所以赋值3或者50也没啥意义吧 ...

你返回false
万一任务的目的地是zsl或者xx门呢?
那不就找不到room任务失败了
门派:古墓派
 楼主| 发表于 2017-4-29 10:42:58 | 显示全部楼层
xyxs@tj 发表于 2017-4-29 10:17
你返回false
万一任务的目的地是zsl或者xx门呢?
那不就找不到room任务失败了

麻烦你看代码,我是说lengths的值没有参与运算,代码里只一个if length是判断了 这个变量false和nil不执行true和有值的时候执行。
门派:华山派
发表于 2017-4-29 11:00:09 | 显示全部楼层
fqyy@tj 发表于 2017-4-29 10:42
麻烦你看代码,我是说lengths的值没有参与运算,代码里只一个if length是判断了 这个变量false和nil不执 ...
  1. function SjRoom:length(route)
  2.         local length = self.lengths[route] or 1
  3.         local isStr = length and type(length) == "string" or false
  4.         if isStr then
  5.                 return loadstring(length)()
  6.         else
  7.                 return length
  8.         end
  9. end
复制代码

有什么问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-7 09:29 , Processed in 0.027055 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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