题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
using namespace std;
typedef long long ll;
const int maxn=20;
int G[maxn][maxn],vis[maxn];
int n,m;
void init()
{
mem(G,0);
mem(vis,0);
}
void dfs(int i)
{
vis[i]=1;
printf("%d ",i);
for(int j=0;j<n;j++)
{
if(G[i][j] && !vis[j])
dfs(j);
}
}
void dfst()
{
for(int i=0;i<n;i++)
{
if(!vis[i])
{
printf("{ ");
dfs(i);
printf("}\n");
}
}
}
void bfst()
{
mem(vis,0);
for(int i=0;i<n;i++)
{
if(!vis[i])
{
printf("{ ");
queue<int> que;
que.push(i);
vis[i]=1;
while(!que.empty())
{
int j=que.front(); que.pop();
printf("%d ",j);
for(int k=0;k<n;k++)
{
if(G[j][k] && !vis[k])
{
que.push(k);
vis[k]=1;
}
}
}
printf("}\n");
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int s,e;
for(int i=0;i<m;i++)
{
scanf("%d%d",&s,&e);
G[s][e]=G[e][s]=1;
}
dfst();
bfst();
}
return 0;
}