#include<bits/stdc++.h>
using namespace std;
#define INF 100000
#define maxn 6
int G[maxn][maxn]; //邻接矩阵
bool vis[maxn]; //访问标记数组
vector<int> res; //存储访问结果
//遍历u所在的连通块
void BFS(int u)
{
queue<int> que;
que.push(u);
vis[u] = true;
while(!que.empty())
{
int u = que.front();
que.pop();
res.push_back(u);
for(int i=0; i<maxn; i++)
{
if(!vis[i] && G[u][i]!=INF)
{
que.push(i);
vis[i] = true;
}
}
}
}
void BFSTraversal(int s)
{
//在所有的节点指定一个遍历起点(题目意思可能指定起点)
for(int i=s; i<maxn; i++)
{
if(!vis[i])
BFS(i);
}
for(int i=0; i<s; i++)
{
if(!vis[i])
BFS(i);
}
}
void inputG(int edge)
{
//初始化访问标记数组vis
fill(vis,vis+maxn,false);
//初始化邻接矩阵INF
fill(G[0], G[0]+maxn*maxn, INF);
//面向邻接矩阵输入值
for(int i=0; i<edge; i++)
{
int a, b;
cin>>a>>b;
G[a][b] = 1;
}
}
int main()
{
freopen("in.txt","r",stdin);
inputG(9);
BFSTraversal(0);
for(int i:res)
{
cout<<i<<" ";
}
return 0;
}
图论-BFS-邻接矩阵
最新推荐文章于 2024-06-01 20:06:44 发布