【问题标题】:Variant of N-Queens algorithmN-Queens 算法的变体
【发布时间】:2012-11-01 07:25:55
【问题描述】:

不知道有没有研究过这个问题,只是在尝试一般的N-Queens问题时突然想到的。给定一个N*N 棋盘,需要的最小皇后数是多少,当策略性地放置时,会使所有单元格受到至少一个皇后的攻击。

我用笔和纸试了一下N = 3,4,5,我得到了 2,3,4。那么答案总是N-1 吗?有证据吗?其次,如果是这样,如何打印出该配置(如果可能有超过1个配置,则全部打印出来)?

【问题讨论】:

  • 嗯?在 3*3 的棋盘上,只需要 1 个皇后(放在中间)。你是说 N-2 个皇后吗?
  • 哦对了,确实需要 1。那么如何找出给定数量的皇后呢?
  • 是的,对于 4,它看起来像 2,而不是 3。所以答案总是N-2
  • 从评论讨论中我认为女王可以保护自己。如果没有 - 3x3 棋盘确实需要 2 个皇后。
  • 不,答案并不总是n-2。如果放置在中间,皇后最多可以覆盖4(n-1) 方格,因此皇后的下限是n^2/(4n-1),对于大 n,它是n/4。如果皇后放在篮筐上,则下限为n/3。为什么不编写一个程序来找出不同值的最小值? :-)

标签: algorithm recursion chess backtracking n-queens


【解决方案1】:

这个问题已经研究过了,kqueens 覆盖nxn 网格的最小数量称为支配数

第一个nk

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

OEIS 给出。这意味着对于 8x8 棋盘,5 个皇后就足够了。

据推测,对于所有满足n=4m+1(例如5,9,13...)的n,2m+1皇后就足够了。 Matthew D. Kearse and Peter B. Gibbons, "Computational Methods and New Results for Chessboard Problems"

中介绍了这个和更多高级算法

【讨论】:

  • 如何编写代码以便返回任何给定n 的结果?有什么算法吗?
  • @Cupidvogel 一种天真的方法:从 k=1 开始。在nxn 板上迭代k 皇后。如果所有方块都被覆盖,则在每次迭代中进行测试。如果您发现至少一个位置覆盖了所有方块,那么您就完成了。否则增加 k 并重复。
  • 是的,我当然可以。但是如果我在采访中给出这个答案,他们会立即把我踢出去!那么最佳解决方案呢?
  • 没有解决这个问题的“最优”算法。研究我链接的论文,其中提到了一些“好”算法。但我怀疑如果你在面试中给出其中一个作为答案,他们会更快地把你踢出去。我给出的算法总会给你正确的最小值,为什么你认为它不是一个好的答案?
  • @Cupidvogel 我会踢你,因为你提出了一个解决方案,其中包含一个难以实现的算法,你需要数周时间才能运行它,而一个简单的解决方案可以在一天内完成。不,我不会,只是在开玩笑 :-) 所有已知的算法都是蛮力的。所以呢?真的认为面试官希望你用非指数解决方案解决一个不知道非暴力算法的问题吗?面试官更感兴趣的问题是:你能找到一个可行的算法并实现它吗?你是吗?
【解决方案2】:

嗯,它不是 N-2,因为 11x11 网格最多需要 8 个皇后(可能更少——这只是我手工找到的一个例子):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多