咸鱼向路径计算实验
本帖最后由 pavo 于 2019-1-29 04:35 PM 编辑由于历次看大佬的机器人。。都是一头雾水。。完全看不懂(扶额
刚好有空(放假啦啦啦啦),于是反方向,直接从头开始研究看看。。
以下是咸鱼玩家放假第一天的,什么扩充功能都没考虑的,什么复杂语句都不会用的,连函数都没打包的,注释超多的,路径计算实验(做到一半才知道这思路学名叫dijkstra算法。。59年就被提出了。。顺便作为来自外行的一甲子纪念吧就算。。),供鲜鱼参考&请大佬指教&备忘。。--walk连接
Start = 1 --测试用起点
Target = 10 --测试用终点
Path = {} --最短路径
PathReverse = {} --最短路径倒序
walkPath = {} --到各节点最短路径的上一节点
Distance = {} --起点到各节点的距离
nodeNum = 10 --节点数量
nodeList = {} --节点表
nodeList = {} --节点中文名
nodeList = {} --节点英文名
nodeList = {} --节点计算标记
nodeList = "古墓派"
nodeList = "gumu"
nodeList = "全真派"
nodeList = "quanzhen"
nodeList = "华山村"
nodeList = "huashancun"
nodeList = "华山派"
nodeList = "huashan"
nodeList = "南阳"
nodeList = "nanyang"
nodeList = "洛阳"
nodeList = "luoyang"
nodeList = "襄阳"
nodeList = "xiangyang"
nodeList = "许昌"
nodeList = "xuchang"
nodeList = "长安"
nodeList = "changan"
nodeList = "麒麟村"
nodeList = "qilincun"
walkList = {}
for i=1,nodeNum,1
do
nodeList = 0 --初始化节点计算标记
walkPath = 0 --初始化路径
walkList = {} --节点i,j间的距离表
for j=1,nodeNum,1
do
walkList = 10000 --初始化节点间的距离,应为无穷大(也就是不相连),用10000凑合一下
end
end
walkList = 19
walkList = 19
walkList = 11
walkList = 11
walkList = 8
walkList = 6
walkList = 8
walkList = 6
walkList = 7
walkList = 7
walkList = 2
walkList = 7
walkList = 12
walkList = 13 --刚记录到洛阳。。这么记录也是个坑。。不过只是学习也无所谓,提高效率是以后的问题。。
walkList = 7
walkList = 2
walkList = 12
walkList = 13
--计算起点
for i = 1,nodeNum,1
do
Distance = walkList --更新起点到节点i的距离
end
Distance = 0 --起点到起点的距离当然为0,而不是无穷大
nodeList = 1 --标记起点为已计算
--计算其它节点
for i = 1,nodeNum,1 --每次循环计算一个节点
do
LastPassDistance = 10000 --初始化,无穷大再用10000凑合凑合
for j = 1,nodeNum,1
do
if Distance < LastPassDistance and nodeList == 0 --选取与已计算区域相连,且,在节点表中顺序最靠前的一个未计算节点
then
LastPass = j --取该点为LastPass,可能成为最短路径上的最后一个中途节点
LastPassDistance = Distance --取起点到该节点的距离
break
end
end
nodeList = 1 --标记该点为已计算
for j = 1,nodeNum,1
do
if LastPassDistance + walkList < Distance --如果从起点经过该节点到节点j的距离,比原来从起点到节点j的距离近
then --那么该节点为新最短路径上的最后一个中途节点
Distance = LastPassDistance + walkList --更新起点到节点j的距离
walkPath = LastPass --用walkPath记录,从起点到j,现有最短路径上的最后一个中途节点LastPass
end
end
end
--获得逆序路径PathReverse
PathReverse = Target --逆序路径第一个当然是终点
i = 2
while walkPath ~= 0
do
PathReverse = walkPath --逐个累加,最短路径上的最后一个中途节点walkPath
Target=walkPath
i = i + 1
end
--获得路径Path
for i=1,#PathReverse,1
do
Path = PathReverse[#PathReverse+1-i] --获得路径
Note(Path) --丢进脚本测试输出
end北大侠客行MUD,中国最好的MUD chat* mobai
chat* bud pavo
yct55 厉害,有时候研究别人的,不如自己写一个 完全看不懂
一脸懵逼
yct49 请学习《图论》相关知识再来玩
页:
[1]