名称:广度优先遍历

/*
名称:广度优先遍历
说明:广度优先遍历类似于树中的层次遍历,所以其需要使用到一个辅助的队列,用来保存接下来要访问的顶点顺序。其空间复杂度最高为O(V)。
其次,对于广度的优先遍历来说,其主要的时间也是花在访问当前结点的下一个结点上,所以对于用临接矩阵存储结构的图来说,其时间复杂度为O(V2)。对于临接表来说,时间复杂度为O(V+E)。

具体的算法采用两种方式都都差不多,此处之敲了以临接矩阵的图的广度优先遍历。

*/

#include<iostream>
#include<queue>

#include "graph.h"
using namespace std;

//访问标志数组
bool visited1[MaxVertexNum];

queue<int> Q;   //辅助队列Q


//广度优先遍历(采用临接矩阵结构)
void BFS1(MGraph G,int v)
{
    int val = -1;
    cout<<GetVex1(G,v)<<" ";    //访问输出v顶点

    visited1[v] = true;      //对v做已访问标记

    Q.push(v);   //顶点v入队列

    while(Q.empty() == false)
    {
        val = Q.front();    //获得队首的顶点
        Q.pop();            //出队

        for(int w = FirstNeighbor1(G,val); w >= 0; w = NextNeighbor1(G,val,w))
        {
            if(visited1[w] == false)
            {
                cout<<GetVex1(G,w)<<" ";        //访问顶点
                visited1[w] = true;          //做已访问标记
                Q.push(w);
            }

        }
    }
}


//总的广度优先遍历(采用临接矩阵结构)
void BFSTraverse1(MGraph G)
{
    //初始化标记数组
    for(int i = 0;i<G.vexnum;++i)
    {
        visited1[i] = false;
    }

    for(int i = 0;i<G.vexnum;++i)
    {
        if(visited1[i] == false)
        {
            BFS1(G,i);       //从i结点开始访问
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值