优化直角A *算法进行寻路

时间:2017-12-28 23:17:29

标签: algorithm path-finding a-star

我正在寻找在基于网格的RTS城市建设游戏中放置道路的寻路,因为我已经使用A *算法进行车辆的寻路,我认为将它用于此任务也很方便。由于我们的道路只是简单的方块,我无法使用原始算法,因为道路就像图片一样: Roadplacement

原始算法检查它旁边的每个网格方格如下:

for (int x = -1; x <= 1; x++)
        {
            for (int y = -1; y <= 1; y++)
            {
                if (x == 0 && y == 0))
                { continue; }
                //the rest of the code goes here

我认为避免那些对角线放置的最简单方法是阻止使用的选项,每个网格方块都不会检查它周围的8个方格而只是4个加号:

for (int x = -1; x <= 1; x++)
            {
                for (int y = -1; y <= 1; y++)
                {
                    if ((x == 0 && y == 0)|| (x != 0 && y != 0))
                    { continue; }
                    //the rest of the code goes here

唯一的问题是找到路径的时间会急剧增加,我的意思是在很长的距离内它会从6毫秒跳到约70毫秒。 有没有人有我可以使用的解决方案,或建议另一种算法更适合这类问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用XOR优化此行:

if ((x == 0 && y == 0)|| (x != 0 && y != 0))

做这样的事情:

if (!(x ^ y))

我不确定这会加快多少,但值得一试!