Lua(trAInsported):尝试实现波前算法,不起作用

问题描述 投票:1回答:1

我正在尝试实现波前算法,但该函数存在问题,该函数会生成具有特定梯度的地图。

我尝试了下面几种不同版本的代码,但都没有用。

如果该梯度尚未进行bin改变,则应将每个邻居的梯度上的该算法的起点(目标)设置为1,然后从该点开始(类似于每个波前算法)。

originXoriginY是目标,应该从中开始算法。 mapMatrix是全局变量

mapMatrix看起来像这样:

0 0 0 0 0 0 0
0 0 N 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 N 0 0 N 0 N
N N 0 0 N 0 0 
0 0 0 0 0 0 0

((对于铁轨为0,对于障碍物为N(无))

预期的输出示例:

7 6 5 4 3 4 5
6 5 N 3 2 3 4
5 4 3 2 1 2 3
6 5 4 3 2 3 3
7 N 5 4 N 4 N
N N 6 5 N 5 6 
9 8 7 6 7 6 7

并且使用此代码,例如:

function pathFinder(originX, originY)
    northDir = originY - 1
    eastDir = originX + 1
    southDir = originY + 1
    westDir = originX - 1

    if northDir > 0 and mapMatrix[originX][northDir] == 0 then 
        mapMatrix[originX][northDir] = mapMatrix[originX][originY] + 1
        pathFinder(originX, northDir)

    end
    if eastDir <= 7 and mapMatrix[eastDir][originY] == 0 then 
        mapMatrix[eastDir][originY] = mapMatrix[originX][originY] + 1
        pathFinder(eastDir, originY)

    end
    if southDir <= 7 and mapMatrix[originX][southDir] == 0 then 
        mapMatrix[originX][southDir] = mapMatrix[originX][originY] + 1
        pathFinder(originX, southDir)

    end
    if westDir > 0 and mapMatrix[westDir][originY] == 0 then 
        mapMatrix[westDir][originY] = mapMatrix[originX][originY] + 1
        pathFinder(westDir, originY)
    end
end

我得到这个mapMatrix

0 0 0 0 3 4 5
0 0 N 0 2 10 6
0 0 0 0 1 9 7
0 0 0 0 0 0 8
0 N 0 0 N 0 N
N N 0 0 N 0 0 
0 0 0 0 0 0 0

如果我切换if语句,它将产生mapMatrix的不同版本>

制作northDirlocal后,输出看起来像这样:EDIT

33 24 23 22 3 4 5
32 25 N 21 2 11 6
31 26 27 20 1 10 7
30 29 28 19 20 9 8
31 N 29 18 N 10 N
N N 30 17 N 11 12
33 32 31 16 15 14 13

如果需要更多代码或信息,我很乐意为您提供帮助

我正在尝试实现波前算法,但该函数存在问题,该函数会生成具有特定梯度的地图。我尝试了以下代码的几个不同版本,但都没有...

algorithm lua breadth-first-search wavefront
1个回答
0
投票

您的代码根本是错误的。在第一次检查中递归调用pathFinder时,它将一直朝那个方向前进,直到出现任何障碍为止,然后才朝下一个方向前进,依此类推。


BFS实际上是一个非常简单的算法。可以轻松地在队列上迭代地实现它,而无需进行任何递归,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.