图的遍历——BFS

Posted chiweiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历——BFS相关的知识,希望对你有一定的参考价值。

原创


裸一篇图的BFS遍历,直接来图:

技术分享图片

 简单介绍一下BFS遍历的过程:

  以上图为例子,从0开始遍历,访问0,按大小顺序访问与0相邻的所有顶点,即先访问1,再访问2;

至此顶点0已经没有作用了,因为其本身和与其所有相邻的顶点都已被访问,将其出队列,我们用队列

存储已访问过的顶点;然后顺着队列,访问顶点1和所有与顶点1相邻的顶点,这里没有,所有访问顶点

2和所有与顶点2相邻的结点,即3和4,注意,是先访问3,再访问4,因为采用邻接矩阵来存储图。

Java:

import java.util.*;

public class 图的遍历_bfs {
    
    static int v;    //顶点数
    static int e;    //边数
    static int array[][];    //邻接矩阵
    static int book[];    //标记
    static int que[];    //队列
    static int max=99999;    //无穷

    public static void main(String[] args) {
        Scanner reader=new Scanner(System.in);
        v=reader.nextInt();
        e=reader.nextInt();
        array=new int[v][v];
        book=new int[v];
        que=new int[v];
        //矩阵初始化
        for(int i=0;i<v;i++) {
            for(int j=0;j<v;j++) {
                if(i==j) {
                    array[i][j]=0;
                }
                else {
                    array[i][j]=max;
                }
            }
        }
        //读入边
        for(int i=0;i<e;i++) {
            int first_One=reader.nextInt();
            int second_Two=reader.nextInt();
            array[first_One][second_Two]=1;
            array[second_Two][first_One]=1;
        }
        int head=0;    //头指针
        int tail=0;    //尾指针
        que[tail]=0;    //从顶点0开始遍历
        book[0]=1;
        tail++;
        while(head<tail) {
            for(int i=0;i<v;i++) {
                if(array[ que[head] ][i]==1 && book[i]==0) {
                    que[tail]=i;    //加入队列
                    tail++;
                    book[i]=1;
                }
                if(tail>v-1) {
                    break;
                }
            }
            head++;
        }
        for(int i=0;i<v;i++) {
            System.out.print(que[i]+" ");
        }
    }

}

测试用例:

输入:

6 5
0 1
1 2
2 3
0 4
4 5

输出:

0 1 4 2 5 3

22:34:03

2018-07-22






以上是关于图的遍历——BFS的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第六章图-第三节:图的遍历(DFS和BFS)

图的遍历方法——DFS和BFS

图的遍历BFS

15 图-图的遍历-基于邻接矩阵实现的BFS与DFS算法

图的遍历——BFS

算法导论—无向图的遍历(BFS+DFS,MATLAB)