2010-12-10 69 views
1

這是一個家庭作業問題。我正在爲Java中的經典n-Queens問題編寫解決方案。我的程序看起來像this,但它返回所有合法皇后展示位置的集合,而不是將它們打印出來。我代表皇后放置爲int[],並在執行時使用HashSet<int[]>返回Set<int[]>。 (由於展示位置的順序並不重要,因此此處適用Set)。關於經典n-Queens在Java中的實現問題

問題是Java陣列不會覆蓋hashCode,而不同的數組實例具有不同的哈希碼。

我可以編寫一個包裝類QueensPlacements,它包含一個數組並覆蓋hashCodeArrays.deepHashCode,並返回Set<QueensPlacement>。然而它看起來冗長而不雅。任何人都可以提出更好的解決方案嗎

+1

包裝類可能更好 - 它不是不雅觀,因爲Set 使事情更明顯,然後設置。就像hashcode一樣,你會用int []來解決其他問題。例如,你如何確定只有n個皇后 - 大小是n? – Fakrudeen 2010-12-10 11:42:03

回答

2

存在幾個實現Set接口的標準類。您可以使用TreeSet並提供您自己的比較器。

1

爲什麼不是Set<List<Integer>>

1

我可以編寫一個包裝類QueensPlacements,它包含一個數組並覆蓋hashCode和Arrays.deepHashCode,並返回Set。然而它看起來冗長而不雅。

創建自定義類可能不是一個壞主意。它聽起來像是擔心你只是簡單地創建一個包裝類來傳遞數據,但是你確定沒有其他方法可以使它成爲解決方案域的完整部分嗎?接收展示位置集的代碼如何處理它?有沒有方法可以提供便於接收代碼的內容?一個很好的toString()方法至少可以調試嗎?

*編輯:*

考慮過這QueensPlacement可以展示位置中是一致的排序,這不是絕對必要的概念性的問題(也沒關係到計算機)提供Comparator<QueensPlacement>,但可能使用戶界面稍微好一點(例如,如果以相同順序顯示相同的展示位置,用戶不會更好)。