每日演算法(三十九) java回溯法解決八皇后

2021-09-24 05:12:24 字數 779 閱讀 2822

該問題是國際西洋棋棋手馬克斯·貝瑟爾於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...