廣度優先搜尋演算法(附C 實現)

2021-08-21 17:41:32 字數 1477 閱讀 7643

這一篇文章將對bfs作出介紹。佇列的push操作將元素新增到佇列的末尾,但pop操作將佇列的第乙個元素彈出,這與堆疊有差異。

我們構造這樣乙個圖(如圖1),並通過c++實現bfs,本文處理的圖比二叉樹要更複雜,如果時針對二叉樹的bfs,程式會更為簡單

演算法過程:

1.將根節點放入佇列中

2.從佇列中取出第乙個元素,將佇列中的第乙個元素彈出

3.將所取得元素的全部節點加入佇列中

4.判斷佇列是否為空

a. 若是,則結束

b.若不是,則跳到第二步

以下**在vs2017中通過編譯

//如果你認為打賞作者是有必要的,我的支付寶賬號也是[email protected]

#include#include#include#includeusing namespace std;

vector> tree;//宣告乙個二維向量

int flag[10];//用於搜尋到了節點i的第幾個節點

queuem;//宣告乙個佇列

int ar_tree[8] = ;

void bfs(int node)

if (!m.empty())

}int main()

//bfs

cout << "bfs過程:" << endl;

m.push(1);

bfs(1);

cout << endl;

return 0;}

執行結果:

佇列和遞迴同時使用並不是乙個明智的做法(這樣做會大大降低程式的可讀性),下面開始解決這個問題,這一次不再使用遞迴

/*

*/#include #include using namespace std;

class tree

tree() :num(0)

~tree() {}//析構函式

};queueccl;//宣告乙個佇列,用於儲存樹的節點

tree mytree[10];

int ar_tree[8] = ;

tree * tree_ptr;

int main()

else

else

} }//把根節點放入佇列中

ccl.push(&mytree[1]);

while (!ccl.empty())

if (tree_ptr->middle != nullptr)

if (tree_ptr->right != nullptr)

cout << tree_ptr->num << " ";

ccl.pop();

} cout << endl;

return 0;

}

筆者更推薦使用資料結構樹的這份**,資料結構讓程式邊得更加清晰明了。

深度優先搜尋演算法(附C 實現)

深度優先搜尋演算法 以下簡稱dfs 是一種用於遍歷 或搜尋 樹 或圖 的演算法。我們構造這樣乙個圖 如圖1 並通過c 實現dfs 圖1 於codeforces.com 演算法過程 1.從根節點開始 2.放入乙個節點 起始時放入的為根節點 3.如果這個節點是第一次出現,則放入堆疊中 4.判斷該節點的子...

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...

廣度優先搜尋演算法

在深度優先搜尋中,深度越大的結點越先得到擴充套件。如果把它改為深度越小的結點越先得到擴充套件,就是廣度優先搜尋法。廣度優先搜尋演算法的基本思想 1 建立乙個空的狀態佇列ss 2 建立乙個空的狀態庫sb 3 把初始狀態s 0 存入佇列ss中 4 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...