題目描述:
在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增加:
可以對標誌陣列進行壓縮,壓縮成一維陣列
#includeusingnamespace
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...