zoukankan      html  css  js  c++  java
  • 算法-图(6)广度优先遍历图

    若用邻接矩阵表示图,得到的BFS序列是唯一的。若用邻接表表示则不唯一。

    广度优先搜索

    逐层遍历,图中有多少顶点就要重复多少步,每一步算法都有一个当前顶点,最初的当前顶点为指定的起始顶点,先访问当前顶点,再依次访问其所有还没访问过的邻接顶点,设置访问过的顶点设置访问标志为visit[v]=true

    每个顶点进队列仅一次,因此while循环最多执行n次

    1若用邻接表表示图

    总循环时间代价为各结点度的和O(e),总的时间代价为O(n+e)

    2若用邻接矩阵表示图

    对于每一个被访问的结点,循环要检测矩阵中n个元素,总时间代价为O(n2)

    template <class T,class E>
    void BFS(Graph<T,E>& G,const T& v){
        int i,w,n=G.NumberOfVerticles();
        for (i=0; i<n; i++) visit[i]=false;
        int loc=G.getVertexPos(v);
        count<<G.getValue(loc)<<'';
        visited[loc]=true;
        //  不是递归过程,使用队列记忆正在访问的这一层和上一层的结点
        Queue<int> Q;
        Q.EnQueue(loc);
        while(!Q.IsEmpty){
            Q.DeQueue(loc);  //注意,队列里的结点已经visit过了,所以出队列后只要把邻接结点进队列即可
            w=getFirstNeighbour(loc);
            while(w!=-1){
                if(visited[w]==false){
                    cout<<G.getValue(w)<<'';
                    visited[w]=true;   //进队列前先visit
                    Q.EnQueue(w);
                }
                w=G.getNextNeighbour(loc,w);
            }
        }
        delete []visited;
    };
  • 相关阅读:
    Kafka 1.0.0集群安装
    java实现以docx格式导出
    基于java处理.docx格式的word合并
    基于java 合并.doc和docx格式的Word文件
    Docker版本Jenkins的使用
    Codeforces 1243 D 0-1 MST
    Public model for matrix
    Codeforces 1220 E Tourism
    Codeforces 1221 G Graph And Numbers
    Codeforces 1221 F Choose a Square
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9301622.html
Copyright © 2011-2022 走看看