八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於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...