输入样例
8 6
0 7
0 1
2 0
4 1
2 4
3 5
输出样例
{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }
邻接矩阵
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
typedef pair<int,int> PII;
int g[20][20];
int vis[20];
int n,m;
void dfs(int u){
vis[u]=1;
printf(" %d",u);
for(int v=0;v<n;v++){
if(!vis[v]&&g[u][v]==1)
dfs(v);
}
}
void bfs(int u){
queue<int> q;
q.push(u);
vis[u]=1;
while(q.size()){
int tmp=q.front(); q.pop();
printf(" %d",tmp);
for(int v=0;v<n;v++){
if(!vis[v]&&g[tmp][v]==1){
vis[v]=1;
q.push(v);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>m;
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
g[u][v]=1;
g[v][u]=1;
}
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
if(!vis[i]){
printf("{");
dfs(i);
printf(" }\n");
}
}
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
if(!vis[i]){
printf("{");
bfs(i);
printf(" }\n");
}
}
return 0;
}
邻接表
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
typedef pair<int,int> PII;
vector<int> g[20];
int vis[20];
int n,m;
void dfs(int u){
vis[u]=1;
printf(" %d",u);
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!vis[v]) dfs(v);
}
}
void bfs(int u){
queue<int> q;
q.push(u);
vis[u]=1;
while(q.size()){
int tmp=q.front(); q.pop();
printf(" %d",tmp);
for(int i=0;i<g[tmp].size();i++){
int v=g[tmp][i];
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>m;
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
if(!vis[i]){
printf("{");
dfs(i);
printf(" }\n");
}
}
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
if(!vis[i]){
printf("{");
bfs(i);
printf(" }\n");
}
}
return 0;
}