图的宽度优先搜索(BFS)以及C++队列知识复习

图的宽度优先搜索和二叉树的层次遍历很像,是一种按层次往外扩展的遍历。其实很简单,自然要用到一个队列,因为FIFO的性质简直就是为层次遍历而生的。

用一个队列记录正在访问的节点的邻接节点,把当前节点的邻接节点全部放到队列后面,在队列中删除当前访问节点。这样队列中的节点顺序就是层次遍历的顺序了。

void BFS(Graph g,int v,bool *visited)
{
    ENode *w;
    int u;
    Queue q;
    visited[v]=true;
    cout<<v;
    q.push(v);//v进入队列
    while(!q.empty())
    {
        u=q.front();//u存放队列头元素
        q.pop();//删除队列头元素
        for(w=g.A[u];w;w=w->NextArc)
        {
            if(!visited[w->AdjVex])
            {
                cout<<w->AdjVex;
                visited[w->AdjVex]=true;
                q.push(w->AdjVex);
            }
        }
    }
}
void Traversal_BFS(Graph g)
{
    bool visited[MaxSize];
    int n=g.Vertices;
    for(int i=0;i<n;i++)
    {
        visited[i]=false;
    }
    for(int i=0;i<n;i++)
    {
        if(!visited[i])
            BFS(g,i,visited);
    }
}

#include<iostream>
#include<queue>
using namespace std;
int main()
{
    queue<int> que;
    que.push(1);
    cout<<"队列第一个元素"<<que.front()<<endl;
    cout<<"队列大小"<<que.size()<<endl;
    que.push(2);
    cout<<"队列尾部元素"<<que.back()<<endl;
    cout<<"队列大小"<<que.size()<<endl;
    que.pop();
    cout<<"弹出队顶元素后的第一个元素"<<que.front()<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值