該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
思路是按行來規定皇后,第一行放第乙個皇后,第二行放第二個,然後通過遍歷所有列,來判斷下乙個皇后能否放在該列。直到所有皇后都放完,或者放哪都不行。
詳細一點說,第乙個皇后先放第一行第一列,然後第二個皇后放在第二行第一列、然後判斷是否ok,然後第二列、第三列、依次把所有列都放完,找到乙個合適,繼續第三個皇后,還是第一列、第二列……直到第8個皇后也能放在乙個不衝突的位置,算是找到了乙個正確解。然後回頭繼續第乙個皇后放第二列,後面繼續迴圈
**如下
public
class
queen
//反斜方向
if(clos[m]
+d<=
(maxqueen-1)
)}//到此知道了哪些位置不能放皇后
for(
int i=
0;i) clos[n]
=i;//下面仍可能有合法位置
if(nelse}}
private
void
printqueen()
else
} system.out.
println()
;}}public
static
void
main
(string[
] args)
}
每日演算法之三十九 Pow x, n
實現浮點型別的冪運算,函式原型為 double pow double x,int n 在求解這個問題的時候是乙個很掙扎的過程,因為它不是報錯而是一直提示你超出時間,那麼必須一次次的考慮怎樣降低時間複雜度。首先最直接的思路是下面這樣的,就跟直觀的數學求解一樣。double pow double x,i...
C語言回溯法解八皇后問題 八皇后演算法
在乙個西洋棋棋盤上放置八個皇后,使得任何兩個皇后之間不相互攻擊,求出所有的布棋方法,並推廣到n皇后情況。啥文字都不用看,b站上有個非常詳細的動畫 解說,上鏈結!click here include include include using namespace std void put queen ...
演算法題解篇 Java 八皇后演算法題(遞迴回溯法)
author skipper class solution 遞迴回溯方式擺放皇后 param n 待擺放皇后個數 param index 已擺放皇后個數 private intputqueen int n,int index 表示在 index 行的第 i 列嘗試擺放皇后 for int i 0 i...