借助SDUT OJ验证代码
基于邻接表的广度优先搜索遍历https://acm.sdut.edu.cn/onlinejudge3/contests/3987/problems/E
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
struct node
{
int v;
int next;
}a[N];
int head[N];
int cnt;
int vis[N];
int que[N];
int in, out;
#define TLE std::ios::sync_with_stdio(false);
void BFS(int n)
{
int in = 0, out = 0;
que[in++] = n;
vis[n] = 1;
while (in > out)
{
int now = que[out];
cout << que[out++] << " ";
for (int i = head[now]; i!= -1; i = a[i].next)
{
if (!vis[a[i].v])
{
vis[a[i].v] = 1;
que[in++] = a[i].v;
}
}
}
}
void add(int u, int v)
{
a[cnt].v = v;
a[cnt].next = head[u];
head[u] = cnt++;
}
int main()
{
TLE;
int t, n, m, u, v, k;
cin >> n;
while (n--)
{
memset(vis, 0, sizeof(vis));
memset(head, -1, sizeof(head));
cnt = 0;
cin >> k >> m >>t;
int x = m;
while (m--)
{
cin >> u >> v;
add(u, v);
add(v, u);
}
int tt;
for (int i = 0; i < x; i++)//此出处要根据节点编号进行排序
{
for (int j = head[i]; j != -1; j = a[j].next)
for (int l = a[j].next; l != -1; l = a[l].next)
{
if (a[j].v > a[l].v)
{
tt = a[j].v;
a[j].v = a[l].v;
a[l].v = tt;
}
}
}
BFS(t);
cout<<endl;
}
return 0;
}