經典 八皇后 遞迴

2021-10-02 12:00:35 字數 1045 閱讀 6470

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法.

由於使用迴圈會存在多層,比較繁雜,這裡使用遞迴dfs(深度優先搜尋)解決

結束條件:

x == height//所有行已填充(陣列從0開始計數)
合法條件:

x行y列:前x-1行 使用for迴圈進行判斷即可

a[i]

[j]==1&&

((x - i)

== math.

abs(y - j)

|| x == i || y == j)

static

final

int height =8;

static

final

int width =8;

static

int a[

]=newint

[height]

[width]

;static

int sum =0;

public

static

void

main

(string[

] args)

public

static

void

dfs(

int x)

for(

int j =

0; j < width; j++)}

}/**

* 判斷當前點的合法性

* * @param x

* @param y

* @return

*/public

static

boolean

check

(int x,

int y)}}

return

true

;}

經典遞迴問題 八皇后

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。解題思路 在這之前我們要明確遞迴求解其實是分成兩個部分的 遞迴回朔...

遞迴解決經典八皇后問題

public class recursiontest 列印問題 public static void test int n else 階乘問題 public static intfactorial int n else 迷宮問題 迷宮問題,求初始點到終點的一條通路 不一定是最小通路!牆體設為1,路徑...

經典八皇后

題目描述 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法!這道題,很明顯的回溯法 回溯法的的精髓說白了就是要有乙個狀態標誌,然後根據這標誌來決定,下一步走不走.這裡這個標誌我們選用乙個n n的二維陣列 include iostr...