#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,k,u,v,idx,t;
int g[N][N];
int arr[N];
int flag[N];
queue<int> q;
void init()//初始化
{
idx=0;
for(int i=0;i<n;i++)
{
flag[i]=false;
for(int j=0;j<n;j++)
{
g[i][j]=0;
}
}
}
void build()//建立邻接矩阵
{
for(int i=0;i<m;i++)
{
cin>>u>>v;
g[u][v]=g[v][u]=1;//双向边
}
}
void bfs(int k)
{
q.push(k);
arr[idx++]=k;
flag[k]=true;
while(q.size())
{
int i=q.front();
for(int j=0;j<n;j++)//从下标零开始遍历所有点
{
if(g[i][j]&&!flag[j])//如果i可以直接通向该点,并且该点没有被遍历过
{
arr[idx++]=j;
flag[j]=true;//更新该点的状态
q.push(j);//将该点压入队列
}
}
q.pop();//弹出队头元素
}
}
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m>>k;
init();
build();
bfs(k);
for(int i=0;i<idx-1;i++)
cout<<arr[i]<<" ";
cout<<arr[idx-1]<<endl;
}
return 0;
}
D - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
于 2023-01-15 00:53:10 首次发布