题目:06-图1 列出连通集
思路:最基本的dfs+bfs。。。
代码:
#include <cstdio>
#include <cstring>
#include <queue>
#define ms(x) memset(x,0,sizeof(x))
using namespace std;
const int maxn = 15;
int g[maxn][maxn],visit[maxn];
void dfs(int st,int n){
visit[st] = 1;
printf("%d ",st);
for(int i=0;i<n;i++){
if(g[st][i] && !visit[i]) dfs(i,n);
}
return ;
}
void bfs(int st,int n){
queue<int>Q;
Q.push(st);
while(!Q.empty()){
int prev = Q.front();Q.pop();
printf("%d ",prev);
visit[prev] = 1;
for(int i=0;i<n;i++){
if(g[prev][i] && !visit[i]){
visit[i] = 1;
Q.push(i);
}
}
}
}
int main(){
int n,m,u,v;
while(scanf("%d%d",&n,&m)!=EOF){
ms(g);
for(int i=0;i<m;i++){
scanf("%d%d",&u,&v);
g[u][v] = g[v][u] = 1;
}
ms(visit);
for(int i=0;i<n;i++){
if(visit[i]) continue;
printf("{ ");dfs(i,n);printf("}\n");
}
ms(visit);
for(int i=0;i<n;i++){
if(visit[i]) continue;
printf("{ ");bfs(i,n);printf("}\n");
}
}
}