我想創建一個程序,打印出n皇后問題的所有解決方案1 <= n <= 13
。該程序將從命令行讀取一個整數n
,指示要解決的Queens問題的大小。例如,如果n = 5
它會打印出功能檢查,如果沒有兩件在同一對角線(爪哇)
(1, 3, 5, 2, 4)
(1, 4, 2, 5, 3)
(2, 4, 1, 3, 5)
(2, 5, 3, 1, 4)
(3, 1, 4, 2, 5)
(3, 5, 2, 4, 1)
(4, 1, 3, 5, 2)
(4, 2, 5, 3, 1)
(5, 2, 4, 1, 3)
(5, 3, 1, 4, 2)
目前,我只是停留在我的程序的一個功能。我需要創建一個方法,如果(A [1],A [2],A [3],...,A [n])所表示的置換不在棋子上放置兩個皇后(棋子),它將返回true相同的對角線,否則返回false。要檢查(A [i],i)和(A [j],j)上的兩個皇后是否位於同一對角線上,我需要檢查水平距離是否與它們的垂直距離相同。
該函數被稱爲isSolution()
並且應該最多比較每對皇后一次。如果在同一對角線上找到一對,則不要進行進一步比較並返回錯誤。如果所有n(n-1)/2
比較均未發現對角攻擊,則返回true。
static boolean isSolution(int[] A){
blah blah blah
}
我已經有一個產生一組的所有排列字母排序的功能,它的最終置換到原來的狀態。
isSolution()
函數的內容是什麼?我非常失落,任何事情都會有所幫助,甚至僞代碼概述了isSolution()
的主體。
我知道的事情:i
和j
是兩件之間的水平和垂直距離。我需要製作一對for循環,以便通過每個n(n-1)/2
比較。 「i
」和「j
」應該分別是數組索引和數組元素之間的差異。我也需要使用Math.abs
來區別安全。所以在for循環中,初始化爲i
和j
作爲我提到的差異,然後設置一個if檢查if i==j
返回false。如果進行了所有比較,並且不返回false,則返回true。
在「我知道的事情」之後,你似乎有一個試圖解決問題的輪廓。你是否嘗試爲此編寫代碼?你是否通過一個例子來看看它是否會起作用? – Dukeling