zoukankan      html  css  js  c++  java
  • 图的广度优先/层次 遍历(BFS) c++ 队列实现

      在之前的博文中,介绍了图的深度优先遍历,并分别进行了递归和非递归实现。BFS 无法递归实现,最广泛的实现是利用队列(queue)。这与DFS的栈实现是极其相似的,甚至代码几乎都很少需要改动。从给定的起点节点开始,依次将其邻接节点全部塞入队列,每次访问一个节点时将其pop()出队列,并将其邻接节点也塞入队列。直到队列为空,算法结束。

      代码实现并无太大障碍,c++实现:

     1 #include <iostream>
     2 #include <queue>
     3 using namespace std;
     4 
     5 #define MAX 20
     6 #define START 1
     7 
     8 int visited[MAX];
     9 int map[MAX][MAX];
    10 
    11 void bfs(int start, int n){
    12     queue<int> q;
    13     int q_top;
    14     cout<<start<<" ";
    15     visited[start] = 1;
    16     for (int i = 1; i <= n ;i++ ) {
    17         if(map[start][i] == 1 && visited[i] == 0){
    18             q.push(i);
    19             visited[i] = 1;
    20         }
    21     }
    22     while(!q.empty()){
    23         q_top = q.front();
    24         q.pop();
    25         cout<<q_top<<" ";
    26         for(int i = 1; i <= n; i++ ){
    27             if(map[q_top][i] == 1 && visited[i] == 0){
    28                 q.push(i);
    29                 visited[i] = 1;
    30             }
    31         }
    32     }
    33     
    34 }
    35 
    36 int main(int argc, const char * argv[]) {
    37     int num_vex,num_edge,x,y;
    38     cout<<"Input number of nodes and edges >> ";
    39     cin>>num_vex>>num_edge;
    40     for(int i=0;i<MAX;i++){
    41         for(int j = 0;j < MAX;j++){
    42             map[i][j] = 0;
    43         }
    44     }
    45     for(int i = 1;i <= num_vex;i++){
    46         visited[i] = 0;
    47     }
    48     cout<<"Input edges, "<<num_edge<<" left >> ";
    49     for(int i = 1;i <= num_edge;i++){
    50         cin>>x>>y;
    51         map[x][y] = map[y][x] = 1;
    52         cout<<"Input edges, "<<(num_edge-i)<<" left >> ";
    53     }
    54     bfs(START, num_vex);
    55     return 0;
    56 }
  • 相关阅读:
    第2次实践作业
    第1次实践作业
    软工实践个人总结
    2019 SDN大作业
    第08组 Beta版本演示
    第八章学习小结
    第七章学习小结
    第六章学习小结
    第五章学习小结
    第4章学习小结
  • 原文地址:https://www.cnblogs.com/sweetiemelody/p/4296827.html
Copyright © 2011-2022 走看看