古老而且典型的回溯問題 , 八皇后問題: 找了採用深度優先 進行實現 :
思路:
一、首先 需要 乙個判斷該位置能不能放的問題:
1、乙個同一行 肯定不能放 並且 mat[i][col] 問題了
2、左斜向上的部分肯定不能放 ,因為這裡是從0 行開始的(先卡第一行 在看第二行)要是左斜向上 有皇后 那麼這個位置不能放 mat[row-1][col-1] 問題
3、因為這裡是 好吧 這個圖: 不知道能不能貼出。。。。 因此右向上也不能放 這個就是 mat[row-1][col+ 1]問題了
二、就是dfs() 函式了
這裡的dfs是用 遞迴實現的 對於遞迴實現 那麼就有幾個藥注意的問題了:
1、 第一出遞迴條件, 這裡採用的是if(k >= 8) 出遞迴 因為這裡k表示的是行 , 因此當執行到第八行是就全部結束了, 也就出遞迴了
2、其次就是, 在迴圈裡 這裡是列迴圈。。。滿足放置條件那麼放置 mat[k][i] = 1: dfs(k+1) 繼續往下搜 mat[k][i] = 0 回溯
三、 就是解決問題的函式 solve()
1、初始化過程
2 、 就是dfs ;然後也就差不多了。。。
下面給出其中乙個例項:
下面是**:
#include#include#includeusing namespace std;
class eightqueen
;//下面就寫出個函式即可
bool eightqueen::check(int row , int col)
for(int i = 0; row- i >=0 && col - i>= 0 ; i++)
for(int i = 0 ;col + i < 8 && row - i >= 0 ;i++)
//其他情況 可以放置
return true;
}void eightqueen::output()
putchar('\n'); //換行
}}void eightqueen::dfs(int k)
for(int i = 0 ; i <8; i++)
}}void eightqueen::solve()
//下面需要乙個類的物件
eightqueen one;
int main()
八皇后問題(dfs)
八皇后問題,是乙個古老而著名的問題,是搜尋演算法的經典案例。該問題是國際西洋棋棋手馬克思貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后。使其不能相互攻擊,即任意兩個皇后都不能處於同一行 同一列或者同一斜線,問有多少中擺法。分析 用dfs一行一行得進行擺放,用for迴圈來確定每一列,由於是一...
八皇后問題 dfs
一 題意解析 西洋棋中的皇后,可以橫向 縱向 斜向移動。如何在乙個8x8的棋盤上放置8個皇后,使得任意兩個皇后都不在同一條橫線 豎線 斜線方向上?八皇后問題是乙個古老的問題,於1848年由一位西洋棋棋手提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或...
dfs 八皇后問題
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。因為我們要保證每個皇后不在同乙個對角線,不在一行,不在一列 所以我們每次把第k個皇后放在第k行,即保證每個皇后都...