【问题标题】:Backtracking and chess回溯和国际象棋
【发布时间】:2020-04-19 11:51:58
【问题描述】:

有一个国际象棋场 N*N 已经出现了一些黑色数字。找出你需要放在场上的最少的白色皇后,这样他们就可以击败所有的黑色人物。使用回溯算法。

首先,我将所有可能的皇后放在他们至少可以击败某些东西的位置。那么我应该如何决定女王是否进入最终解决方案?

【问题讨论】:

  • 我的第一步真的正确吗?
  • 首先从一个女王开始,看看你是否可以放置那个女王来攻击所有的黑色人物。如果这是不可能的重复相同的两个皇后等。这是一个迭代加深搜索算法。
  • 尝试实现这样的东西;找到女王可以捕获尚未捕获的东西的所有位置,尝试对它们进行排名,以便捕获最多其他部分的位置排在第一位。然后在第一个位置放置一个女王。如果这捕获了最后一块,请检查当前解决方案是否比您之前获得的解决方案更好(或者是第一个解决方案)。然后,如果还有更多片段需要捕获,则递归应用该算法。如果您尝试在棋盘上放置比目前最好的解决方案更多的皇后,只需返回,因为它不可能更好。
  • 当回到递归关卡时,移除你放置在该关卡的皇后,“取消捕获”它捕获的所有棋子,然后移动到下一个可能的位置。您还应该有一些逻辑来确保您不会多次尝试相同的组合。

标签: algorithm backtracking chess


【解决方案1】:

在递归伪代码中:

minQueensNeeded = ∞
procedure placeQueens():
  if all black pieces are under attack:
    minQueensNeeded = min(minQueensNeeded, number of queens on the board)
  else:
    for each black piece B that is not under attack:
      for each square S from which B can be captured:
        place a queen at S
        placeQueens()
        remove the queen at S

请注意,它会多次访问相同的情况,因为皇后可以按任意顺序放置。这不会影响答案,但对性能来说并不是很好。您可以通过仅将新皇后放在阅读顺序中最后一个皇后之后的方格上来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2014-03-02
    • 2013-05-24
    • 1970-01-01
    • 2015-05-02
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多