廣度優先遍歷(二)八皇后

2021-10-07 12:57:14 字數 1149 閱讀 1745

這是上篇部落格 廣度優先遍歷(一) 全排列 前言

八皇后問題和解數獨問題是回溯演算法的經典例題。

依然建議大家自己動手先試試,體會體會。

回溯演算法框架:

八皇后問題

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

2)思考

① 8x8的棋盤要放8個皇后,所以每一行能且只能放乙個皇后。

②放完第 i 行之後,下一行的皇后放在**呢?

答:放在下一行的、和前 i 行放置的皇后不衝突的位置。

③什麼時候返回乙個結果?

答:成功放置第8行的皇后之後。

class

solution

void

bfs(

int start,vector<

int*

> p)

cout << endl;

count++

;return;}

for(

int j =

0; j <

8; j++);

p.push_back

(a);

//決策

bfs(start +

1, p)

;//向下遍歷

p.pop_back()

;//撤銷決策

}else

continue;}

}//檢查這個位置是否與其他皇后衝突

bool

isfree

(int x,

int y,

const vector<

int*

>

&path)

return res;}}

;

結果:找到了92種解

廣度優先遍歷

廣度優先遍歷 breadth first search 類似於對樹的層序遍歷 遍歷規則為 首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點,其訪問次序可以任意,假定依次為vi1,vi2,vit,並均標記為已訪問過,然後在按照vi1,vi2,vit的次序,訪問每乙個頂點的...

廣度優先遍歷

還是上面那道題 深度遍歷一般是用遞迴,深度不斷增加,廣度搜尋一般用佇列這樣的形式儲存東西 include include using namespace std struct note int main book 51 51 int next 4 2 int head,tail int i,j,k,...

廣度優先遍歷

def printnodeatlevel treenode,level 按層序遍歷輸出樹中某一層的值 if not treenode or level 0 return 0 if level 0 print treenode.val return 1 printnodeatlevel treenod...