如何执行所有正方形,骑士将在从一个位置到另一个位置的同时停止?

问题描述 投票:0回答:2
我不熟悉有关骑士的苦难游戏,但是如果游戏的总要旨是“在一个广场上给骑士赋予骑士,并给出了一个目的地广场,请输出到达该广场所需的最短动作序列”我相信统一的成本搜索算法(Dijkstra最短道路的变体)是您最好的选择。

Wiki页面提供有关如何实现它的伪代码:

https://en.wikipedia.org/wiki/wiki/dijkstra%27S_ALGORITHM#PRACTICAL_OPTIMIZATION_ENFIMIZATIONS_AND_INFINITE_GRAPHSSID

javascript breadth-first-search knights-tour
2个回答
0
投票

您传递给the Call的参数是布尔表达式(几个操作的结果)。这实际上意味着您的集合只能有两个值:visited.has

&&

0
投票
false

条件将永远不会再正确。看起来您可能只是放错了封闭式括号,但随后查看下一点:

  • true
    是错误的:您不想将
    方向标记为访问,而是骑骑士跳到的地方。如果您标记了方向,那么骑士将永远无法沿着同一方向跳跃,这是没有意义的。
    
    有些类似于以前的问题,也是错误的:队列应该具有正方形作为条目,而不是方向。该错误将意味着从队列中取出的正方形永远不会具有3个或更多(NOR 0)的坐标,因此这通常会导致您的程序最终进入无限循环。
    
    硬编码
    if

    的发生在您的代码中,表明骑士正在经典的8x8国际象棋板上移动,其坐标应保持在这些范围内。但是那是错误的。它应该是
  • visited.add(directions[d])
  • ,因为值0到7(包含)是其中一个坐标可以具有的8个不同值。如果您还包括8,则总共有9个可能性。

    然后,您的问题的主题是:

    queue.push(directions[d])
    在您的代码中永远不会修改,因此您返回的内容始终是相同的(IF如果您的程序不会陷入无限循环中)。只有当您到达目标平方时才能确定路径。为了构建它,如果0信息为每个访问的广场(这是骑士来自的正方形)表示的信息,那将很方便。然后,您可以回到该单元格,然后继续这样做,直到到达开始单元格为止。在步行期间,您显然可以构建路径。

  • 要实现一个很容易标记正方形的结构(及其两个坐标)

    和指示骑士的正方形,您可以制作一个8x8阵列,其中每个条目均以

    8
    (含义:含义:未访问)。访问正方形后,将其引用在该位置的该位置中的前一个正方形。

    在这里是校正的代码:
  • 
    
    possibleX <= 8
    
    
    
        

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.