题目链接:点击打开链接
题目大意:略。
解题思路:略。
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; }