题目链接
#include<stdio.h> #include<stdlib.h> #include<string.h> int mp[110][110]; bool vis[110]; int que[10101]; int n, m; void BFS(int s) { memset(vis,0,sizeof(vis)); int ss, ee; int now; ss=ee=0; que[ss++]=s; vis[s]=1; while(ss>ee) { now=que[ee++]; for(int i=0;i<n;i++) { if(vis[i]==0&&mp[now][i]) { vis[i]=1; que[ss++]=i; printf(" %d",i); } } } printf("\n"); } int main() { int t, s, u, v; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&s); memset(mp,0,sizeof(mp)); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); mp[u][v]=mp[v][u]=1; } printf("%d",s); BFS(s); } return 0; } STL que重构 #include <iostream> #include <algorithm> #include <string> #include <stack> #include <queue> using namespace std; const int maxn = 101; int mp[maxn][maxn]; bool vis[maxn+maxn]; int n, m, s; queue <int> que; void init() { while(!que.empty()) que.pop(); for(int i=0;i<n;++i) for(int j=0;j<n;++j) mp[i][j] = 0; for(int i=0;i<n;++i) vis[i] = false; } void bfs(int s) { que.push(s); vis[s] = true; cout<<s; while(!que.empty()) { int now = que.front(); que.pop(); for(int i=0;i<n;++i) { if(mp[now][i]&!vis[i]) { vis[i] = true; que.push(i); cout<<" "<<i; } } } } int main() { ios::sync_with_stdio(false); int t; cin>>t; while(t--) { cin>>n>>m>>s; init(); for(int i=0;i<m;++i) { int u, v; cin>>u>>v; mp[u][v] = mp[v][u] = 1; } bfs(s); } return 0; }