#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int MAXV=1000;//最大顶点数
int n,m;//顶点数,边数
vector<int> G[MAXV];//邻接表
bool vis[MAXV]={false};//访问标记数组
void BFS(int u)
{
queue<int> q;//创建队列q
q.push(u);//将顶点入队
vis[u]=true;//标记顶点已访问
cout<<"BFS访问序列为"<<u<<' ';
while(!q.empty())//判断队列是否为空
{
int u=q.front();//取队首元素
q.pop();//元素出队
for(int i=0;i<G[u].size();i++)//查看该点在邻接表对应边
{
int v=G[u][i];//边的终点
if(vis[v]==false)//如果顶点未被访问
{
q.push(v);//顶点入队
vis[v]=true;
cout<<v<<' ';
}
}
}
}
void BFSTrave()
{
for(int u=0;u<n;u++)
{
if(vis[u]==false)
{
BFS(u);
}
}
}
int main()
{
int u,v;//边的起点和终点
cin>>n>>m;//输入顶点数和边数
for(int i=0;i<m;i++)
{
cin>>u>>v;//输入一条边的起点终点
G[u].push_back(v);//将该边加入邻接表
}
BFSTrave();
return 0;
}
图论—BFS
最新推荐文章于 2022-03-30 17:11:31 发布