#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int a[N][N];
bool visited[N];
int n,T;
void BFSTraverse()//广度优先非递归遍历图,使用辅助队列que和访问标志数组visited
{
for(int i=1;i<=n;i++)
visited[i]=false;
queue<int> que; //置空的辅助队列que
for(int i=1;i<=n;i++) //访问每一个顶点
{
if(!visited[i]) //顶点i尚未访问
{
visited[i]=true;
cout<<i<<" ";
que.push(i); //顶点i入队列
while(!que.empty())
{
int u=que.front();
que.pop(); //队头元素出队列并赋值给u
for(int j=1;j<=n;j++)
{
if(a[u][j]==1&&visited[j]==false) //尚未访问过,且是邻接顶点
{
visited[j]=true;
cout<<j<<" ";
que.push(j);
}
}
}
}
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
BFSTraverse();
}
return 0;
}
广度优先搜索bfs模板
最新推荐文章于 2025-05-29 23:35:58 发布