algorithm - 您如何计算可以放置的最小数量的皇后来攻击每个未覆盖的方格?

标签 algorithm data-structures

<分区>

这是 Elements of Programming Interviews 的变体问题,没有解决方案。

您如何计算可以放置的最少数量的皇后来攻击每个未覆盖的方 block ?

最佳答案

问题是关于在图中找到最小支配集(在你的例子中是皇后图 http://mathworld.wolfram.com/QueenGraph.html ),这个更普遍的问题是 NP-Hard。即使这种减少(在这种特定类型的图上)不太可能是 NP-Hard,您可能会期望找不到任何有效的(多项式)算法,实际上直到今天还没有人找到。

作为面试问题,我认为可以接受的答案是回溯算法。如果您已经将 (n-2) 个皇后放在棋盘上,您可以添加一些小的改进,比如总是停止搜索。

有关算法的更多信息和伪代码以及更复杂的算法,我建议阅读:

Fernau, H. (2010)。最小支配皇后集:一个简单的编程练习?。离散应用数学,158(4),308-318。 http://www.sciencedirect.com/science/article/pii/S0166218X09003722

关于algorithm - 您如何计算可以放置的最小数量的皇后来攻击每个未覆盖的方格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196741/

相关文章:

data-structures - 哈希表的延迟删除

algorithm - 查找一个值是否包含在二叉树中

algorithm - 用于查找大于或小于每个笛卡尔维度中某个值的所有点的空间数据结构

c - 这是编译器仅通过使用位运算来划分的方式吗?

Java递归函数将列表转换为这种数据结构

java - 在 Android 中使用 Hashmap 存储伪无限游戏世界时内存不足

performance - 支持删除任意节点的Lock Free Deque

algorithm - if 条件复杂度 O(n * log(n))

algorithm - 计算广义网络中的最大流量

c - 哈希表的数字折叠算法