這一篇文章將對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 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...