Wiki页面提供有关如何实现它的伪代码:
https://en.wikipedia.org/wiki/wiki/dijkstra%27S_ALGORITHM#PRACTICAL_OPTIMIZATION_ENFIMIZATIONS_AND_INFINITE_GRAPHSSIDfalse
条件将永远不会再正确。看起来您可能只是放错了封闭式括号,但随后查看下一点:
true
是错误的:您不想将方向标记为访问,而是骑骑士跳到的地方。如果您标记了方向,那么骑士将永远无法沿着同一方向跳跃,这是没有意义的。有些类似于以前的问题,也是错误的:队列应该具有正方形作为条目,而不是方向。该错误将意味着从队列中取出的正方形永远不会具有3个或更多(NOR 0)的坐标,因此这通常会导致您的程序最终进入无限循环。
硬编码
if
的发生在您的代码中,表明骑士正在经典的8x8国际象棋板上移动,其坐标应保持在这些范围内。但是那是错误的。它应该是visited.add(directions[d])
然后,您的问题的主题是:
queue.push(directions[d])
在您的代码中永远不会修改,因此您返回的内容始终是相同的(IF如果您的程序不会陷入无限循环中)。只有当您到达目标平方时才能确定路径。为了构建它,如果0
信息为每个访问的广场(这是骑士来自的正方形)表示的信息,那将很方便。然后,您可以回到该单元格,然后继续这样做,直到到达开始单元格为止。在步行期间,您显然可以构建路径。
和指示骑士的正方形,您可以制作一个8x8阵列,其中每个条目均以
8
(含义:含义:未访问)。访问正方形后,将其引用在该位置的该位置中的前一个正方形。
在这里是校正的代码:possibleX <= 8