經典八皇后

2022-08-15 18:57:16 字數 1198 閱讀 3682

題目描述:

在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法!

這道題,很明顯的回溯法

回溯法的的精髓說白了就是要有乙個狀態標誌,然後根據這標誌來決定,下一步走不走.

這裡這個標誌我們選用乙個n*n的二維陣列

#include"

iostream

"using

namespace

std;

int a[100][100

],ans;

const

int n=8

;int check(int x,int

y)void

print()

cout

<}void dfs(int

row)

for(i=1;i<=n;i++)

}}int

main()

2023年5月1日21:22:55增加:

可以對標誌陣列進行壓縮,壓縮成一維陣列

#includeusing

namespace

std;

int a[10

],count;

const

int n =8

;void

print()

cout

<< "

*************************=\n";

}int check(int index,int

loop)

//判斷當前皇后的右上角

//右下角 (1,3)和(0,4) 3+1==0+4

if((index+loop)==(index_pre+data))

return0;

//判斷當前皇后的左下角 (1,3)和(2,4) 3-1==4-2

if((loop-index)==(data-index_pre))

return

0;

} return1;

}void eightqueue(int

index)

eightqueue(index+1

); a[index] = 0

; //回溯}}

}int

main()

經典 八皇后 遞迴

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.由於使用迴圈會存在多層,比較繁雜,這裡使用遞迴dfs 深度優先搜尋...

經典遞迴問題 八皇后

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

DFS經典 八皇后問題

題目 題解 check 0 i 標記列 check 1 line i 標記斜向上的對角線,對於同一條這個方向得對角線行列和相同 check 2 line i n 標記斜向下的對角線,對於同一條這個方向得對角線行列差相同但是可能是負數,所以加上n使其恒為正數 解法一 遞迴解法 includeusing...