八皇后問題(dfs)

2021-10-03 23:11:34 字數 661 閱讀 4950

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

分析:用dfs一行一行得進行擺放,用for迴圈來確定每一列,由於是一行一行得擺放所以不可能同行,我們只需要標記同列,同對角線,就行,會發現主對角線一條對角線上的行列和等於同乙個常數,副對角線一條對角線行列差等於乙個常數,只不過會是負數,防止下標是負數我們可以進行+8,保證是乙個正數,利用這個性質來確定有沒有同行同列

#include

using namespace std;

bool v[10]

,tx[20]

,ty[20]

;//表示這一列,主對角線,負對角線有沒有皇后

int cnt=0;

bool check

(int x,

int y)

for(

int i=

0;i<

8;i++)}

}int

main()

八皇后問題 DFS

古老而且典型的回溯問題 八皇后問題 找了採用深度優先 進行實現 思路 一 首先 需要 乙個判斷該位置能不能放的問題 1 乙個同一行 肯定不能放 並且 mat i col 問題了 2 左斜向上的部分肯定不能放 因為這裡是從0 行開始的 先卡第一行 在看第二行 要是左斜向上 有皇后 那麼這個位置不能放 ...

八皇后問題 dfs

一 題意解析 西洋棋中的皇后,可以橫向 縱向 斜向移動。如何在乙個8x8的棋盤上放置8個皇后,使得任意兩個皇后都不在同一條橫線 豎線 斜線方向上?八皇后問題是乙個古老的問題,於1848年由一位西洋棋棋手提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或...

dfs 八皇后問題

在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。因為我們要保證每個皇后不在同乙個對角線,不在一行,不在一列 所以我們每次把第k個皇后放在第k行,即保證每個皇后都...