北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 4898|回复: 4

咸鱼向路径计算实验

[复制链接]
发表于 2019-1-29 23:36:02 | 显示全部楼层 |阅读模式
本帖最后由 pavo 于 2019-1-29 04:35 PM 编辑

由于历次看大佬的机器人。。都是一头雾水。。完全看不懂(扶额
刚好有空(放假啦啦啦啦),于是反方向,直接从头开始研究看看。。
以下是咸鱼玩家放假第一天的,什么扩充功能都没考虑的,什么复杂语句都不会用的,连函数都没打包的,注释超多的,路径计算实验(做到一半才知道这思路学名叫dijkstra算法。。59年就被提出了。。顺便作为来自外行的一甲子纪念吧就算。。),供鲜鱼参考&请大佬指教&备忘。。
  1. --walk连接
  2. Start = 1 --测试用起点
  3. Target = 10 --测试用终点
  4. Path = {} --最短路径
  5. PathReverse = {} --最短路径倒序
  6. walkPath = {} --到各节点最短路径的上一节点
  7. Distance = {} --起点到各节点的距离
  8. nodeNum = 10 --节点数量
  9. nodeList = {} --节点表
  10. nodeList[1] = {} --节点中文名
  11. nodeList[2] = {} --节点英文名
  12. nodeList[3] = {} --节点计算标记
  13. nodeList[1][1] = "古墓派"
  14. nodeList[2][1] = "gumu"
  15. nodeList[1][2] = "全真派"
  16. nodeList[2][2] = "quanzhen"
  17. nodeList[1][3] = "华山村"
  18. nodeList[2][3] = "huashancun"
  19. nodeList[1][4] = "华山派"
  20. nodeList[2][4] = "huashan"
  21. nodeList[1][5] = "南阳"
  22. nodeList[2][5] = "nanyang"
  23. nodeList[1][6] = "洛阳"
  24. nodeList[2][6] = "luoyang"
  25. nodeList[1][7] = "襄阳"
  26. nodeList[2][7] = "xiangyang"
  27. nodeList[1][8] = "许昌"
  28. nodeList[2][8] = "xuchang"
  29. nodeList[1][9] = "长安"
  30. nodeList[2][9] = "changan"
  31. nodeList[1][10] = "麒麟村"
  32. nodeList[2][10] = "qilincun"
  33. walkList = {}
  34. for i=1,nodeNum,1
  35. do
  36.   nodeList[3][i] = 0 --初始化节点计算标记
  37.   walkPath[i] = 0 --初始化路径
  38.   walkList[i] = {} --节点i,j间的距离表
  39.   for j=1,nodeNum,1
  40.   do
  41.   walkList[i][j] = 10000 --初始化节点间的距离,应为无穷大(也就是不相连),用10000凑合一下
  42.   end
  43. end
  44. walkList[1][2] = 19
  45. walkList[2][1] = 19
  46. walkList[2][3] = 11
  47. walkList[3][2] = 11
  48. walkList[3][4] = 8
  49. walkList[3][5] = 6
  50. walkList[4][3] = 8
  51. walkList[5][3] = 6
  52. walkList[5][6] = 7
  53. walkList[5][7] = 7
  54. walkList[5][8] = 2
  55. walkList[6][5] = 7
  56. walkList[6][9] = 12
  57. walkList[6][10] = 13 --刚记录到洛阳。。这么记录也是个坑。。不过只是学习也无所谓,提高效率是以后的问题。。
  58. walkList[7][5] = 7
  59. walkList[8][5] = 2
  60. walkList[9][6] = 12
  61. walkList[10][6] = 13
  62. --计算起点
  63. for i = 1,nodeNum,1
  64. do
  65.   Distance[i] = walkList[Start][i] --更新起点到节点i的距离
  66. end
  67. Distance[Start] = 0 --起点到起点的距离当然为0,而不是无穷大
  68. nodeList[3][Start] = 1 --标记起点为已计算
  69. --计算其它节点
  70. for i = 1,nodeNum,1 --每次循环计算一个节点
  71. do
  72.   LastPassDistance = 10000 --初始化,无穷大再用10000凑合凑合
  73.   for j = 1,nodeNum,1
  74.   do
  75.     if Distance[j] < LastPassDistance and nodeList[3][j] == 0 --选取与已计算区域相连,且,在节点表中顺序最靠前的一个未计算节点
  76.     then
  77.       LastPass = j --取该点为LastPass,可能成为最短路径上的最后一个中途节点
  78.       LastPassDistance = Distance[j] --取起点到该节点的距离
  79.       break
  80.     end
  81.   end
  82.   nodeList[3][LastPass] = 1 --标记该点为已计算
  83.   for j = 1,nodeNum,1
  84.   do
  85.     if LastPassDistance + walkList[LastPass][j] < Distance[j] --如果从起点经过该节点到节点j的距离,比原来从起点到节点j的距离近
  86.     then --那么该节点为新最短路径上的最后一个中途节点
  87.       Distance[j] = LastPassDistance + walkList[LastPass][j] --更新起点到节点j的距离
  88.       walkPath[j] = LastPass --用walkPath[j]记录,从起点到j,现有最短路径上的最后一个中途节点LastPass
  89.     end
  90.   end
  91. end
  92. --获得逆序路径PathReverse
  93. PathReverse[1] = Target --逆序路径第一个当然是终点
  94. i = 2
  95. while walkPath[Target] ~= 0
  96. do
  97.   PathReverse[i] = walkPath[Target] --逐个累加,最短路径上的最后一个中途节点walkPath[Target]
  98.   Target=walkPath[Target]
  99.   i = i + 1
  100. end
  101. --获得路径Path
  102. for i=1,#PathReverse,1
  103. do
  104.     Path[i] = PathReverse[#PathReverse+1-i] --获得路径
  105.     Note(Path[i]) --丢进脚本测试输出
  106. end
复制代码
北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2019-1-31 07:17:02 | 显示全部楼层
chat* mobai
chat* bud pavo
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2019-1-31 08:56:08 | 显示全部楼层
厉害,有时候研究别人的,不如自己写一个
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2019-1-31 09:29:31 | 显示全部楼层
完全看不懂
一脸懵逼
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2019-1-31 22:15:16 | 显示全部楼层
请学习《图论》相关知识再来玩
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 11:11 AM , Processed in 0.009608 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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