2013-09-27 19 views
0

我已經通過使用回溯算法解決了N-Queen問題,並且可以在C#中生成所有獨特和獨特的解決方案。雖然,我通過在每一行中找到有效位置來限制遞歸的級別,但對於N> 15,算法將無望地放緩。我懷疑原因是每個新的解決方案都必須生成所有8個對稱對象,並檢查這個對比找到解決方案如果這些都不包括在內,那麼新的解決方案可以添加到獨特的解決方案中。校驗和識別N-Queen解決方案

我看到某處提示將校驗和附加到每個解決方案,並創建一個字典,其中校驗和是關鍵,解決方案是List。我找不到這篇文章,而且對於校驗和這個概念來說還是很新的。

任何有關這個問題的幫助將不勝感激。

回答

0

N皇后的哈希或校驗和?幾點:

  1. 皇后相互等價。這意味着我們不希望先後增加女王的校驗和來區分它們,因爲它們應該是等價的。

  2. 位置是重要的。

    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; 
    } 
    

因此,我們可以用類似啓動