最近由於要忙**開題的事,還有實習工作也比較忙,所以這個系列的部落格好久沒有更新了。
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 輸入輸入乙個給定的狀態。輸出輸出到達目標狀態的最小步...