广度优先搜索算法:
邻接矩阵:
#include <iostream>
#include <bits/stdc++.h>
#define maxn 10000
using namespace std;
const int inf=99999;
int e[maxn][maxn];
bool visit[maxn];
int m,n;
void bfs(int u)//遍历u所在的连通块
{
queue<int>q;//定义队列q
q.push(u);//初始点u进队
visit[u]=true;//标记已加入
while(!q.empty())//只要队列非空
{
int u=q.front();//取出队首元素
q.pop();//将队首元素出队
for(int v=0;v<n;v++)
{
//如果u的邻接点v未曾加入过队列
if(visit[v]==false&&e[u][v]!=inf)
{
printf("%d ",e[u][v]);
q.push(v);//将v入队
visit[v]=true;
}
}
}
}
void bfstrave()
{
for(int u=0;u<n;u++)
{
if(visit[u]==false)
bfs(u);
}
}
int main()
{
scanf("%d %d",&m,&n);
fill(e[0],e[0]+maxn*maxn,inf);
fill(visit,visit+maxn,false);
int a,b,c;
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&a,&b,&c);
e[a][b]=c;
e[b][a]=c;
}
bfstrave();
return 0;
}
邻接表:
vector<int>adj[maxn];
void bfs(int u)
{
queue<int>q;//定义队列q
q.push(u);//初始顶点入队
visit[u]=true;//表示已经进队
while(!q.empty())//队列非空
{
int u=q.front();//取出队首元素
q.pop();//将队首元素出队
for(int i=0;i<adj[u].size();i++)
{
int v=adj[u][i];
//如果u的邻接点v未曾加入过队列
if(visit[v]==false)
{
printf("%d ",e[u][v]);
q.push(v);//将v入队
visit[v]=true;
}
}
}
}
void bfstrave()
{
for(int u=0;u<n;u++)
{
if(visit[u]==false)
bfs(u);
}
}