演算法之路 三 BFS

2021-07-29 12:50:06 字數 1962 閱讀 3173

最近由於要忙**開題的事,還有實習工作也比較忙,所以這個系列的部落格好久沒有更新了。

bfs是一種基於「佇列」這種資料結構的搜尋方式,特點是由乙個狀態拓展出很多狀態,然後再由此擴充套件,直到找到目標狀態或者佇列中頭尾指標相遇,即佇列中所有狀態都處理完畢。

bfs對於解決最短或最少問題特別有效,而且尋找深度小,但缺點也很明顯,記憶體消耗巨大(因為它需要大量的陣列單元用來儲存狀態)。

下面是實現bfs的c++**:

1 #include 2 #include 3

using

namespace

std;45

#define max 20

6#define start 178

intvisited[max];

9int

map[max][max];

1011

void bfs(int start, int

n)21}22

while(!q.empty())31}

32}3334}35

36int main(int argc, const

char *argv) 44}

45for(int i = 1;i <= num_vex;i++)

48 cout<<"

input edges,

"<"

left >> ";

49for(int i = 1;i <= num_edge;i++)

54bfs(start, num_vex);

55return0;

56 }

執行結果為:

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$ g++ -o main.cpp

g++: fatal error: no input files

compilation terminated.

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$ g++ -o out main.cpp

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$ ll

total 112

drwxrwxr-x 2 lpq lpq   4096  3月 26 01:02 ./

drwxrwxr-x 4 lpq lpq   4096  3月 26 00:13 ../

-rw-rw-r-- 1 lpq lpq   2825  3月 26 00:46 main.cpp

-rwxrwxr-x 1 lpq lpq 101104  3月 26 01:02 out*

lpq@lpq-optiplex-9020:~/linux_pro/code_resource/algorithm/bfs$ ./out

60 1

0 20 3

1 41 5

2 6top:

0距離top最遠的節點的條數: 2

order:

0 1 2 3 4 5 6

小結:bfs的思想:

(1)頂點v入佇列。

(2)當佇列非空時則繼續執行,否則演算法結束。

(3)出佇列取得隊頭頂點v;訪問頂點v並標記頂點v已被訪問。

(4)查詢頂點v的第乙個鄰接頂點col。

(5)若v的鄰接頂點col未被訪問過的,則col入佇列。

(6)繼續查詢頂點v的另乙個新的鄰接頂點col,轉到步驟(5)。直到頂點v的所有未被訪問過的鄰接點處理完。轉到步驟(2)。

演算法筆記 BFS

這個是題目 相當於就是輸入乙個只有01的矩陣,求其中1的塊數 思路 這道題其實也就是求連通塊的問題,只要乙個位置的上下左右中存在乙個1那就可以連通到一起,是bfs經典的題目 include include include include include using namespace std 這裡需...

BFS演算法框架

bfs演算法框架 bfs的核心思想,就是把一些問題抽象成圖,從乙個節點開始,向四周擴散。一般來說,寫bfs都是用 佇列 這個資料結構,每次將乙個節點周圍的節點加入到隊尾。先舉例 下 bfs 出現的常 場景好吧,問題的本質就是讓你在 幅 圖 中找到從起點 start 到終點 target 的最近距離,...

演算法實驗三 (BFS 分支限界) 八數碼

時限 5000ms 記憶體限制 20000k 總時限 10000ms 描述在九宮格裡放在1到8共8個數字還有乙個是空格,與空格相鄰的數字可以移動到空格的位置,問給定的狀態最少需要幾步能到達目標狀態 用0表示空格 1 2 3 4 5 6 7 8 0 輸入輸入乙個給定的狀態。輸出輸出到達目標狀態的最小步...