校验和识别N-Queen的解决方案

时间:2013-09-27 23:26:10

标签: recursion dictionary checksum backtracking

我通过使用回溯算法解决了N-Queen问题,并且可以在C#中生成所有独特且独特的解决方案。虽然,我通过在每一行中找到有效位置来限制递归的级别,但是对于N> 1,算法将是无可救药地缓慢的。 15.我怀疑原因是我必须生成所有8个对称对应物的每个新解决方案,并检查这与已找到的解决方案。如果这些都不包括在内,则可以将新解决方案添加到独特的解决方案中。

我在某处看到了将校验和附加到每个解决方案的提示,并创建了一个字典,其中校验和是关键,解决方案是List。我找不到文章,否则对校验和的概念来说是非常新的。

非常感谢有关此问题的任何帮助。

1 个答案:

答案 0 :(得分:0)

N-queens的哈希或校验和生成?几点:

  1. 皇后区彼此相同。这意味着我们不希望连续乘以校验和的皇后术语来区分它们,因为它们应该是等价的。

  2. 立场是重要的。

  3. 所以我们可以从以下内容开始:

    public int hashSolution (Queen[] queens) {
        int h = 0;
        for (Queen q : queens) {
            int queenHash = (q.getX() * 23) + q.getY();     // 23 is a prime.
            h += queenHash;
        }
        return h;
    }