fork(6) download
  1. #include <cstdio>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. #define MAX 10
  6. #define DFS_BLACK 1
  7. #define DFS_WHITE -1
  8. typedef pair<int, int> ii;
  9. typedef vector<ii> vii;
  10. typedef vector<int> vi;
  11.  
  12. vi dfs_num;
  13. vector<vii> adj(MAX);
  14.  
  15. void dfs(int u) {
  16. dfs_num[u] = DFS_BLACK;
  17. for (int i = 0; i < (int)adj[u].size(); i++) {
  18. ii v = adj[u][i];
  19. if (dfs_num[v.first] == DFS_WHITE)
  20. dfs(v.first);
  21. }
  22. printf(" %d", u);
  23. }
  24.  
  25. int main() {
  26. int v, e, x, y;
  27.  
  28. scanf("%d %d", &v, &e);
  29. for (int i = 0; i < e; i++) {
  30. scanf("%d %d", &x, &y);
  31. adj[x].push_back(ii(y, 1));
  32. adj[y].push_back(ii(x, 1));
  33. }
  34.  
  35. int numCC = 0;
  36. dfs_num.assign(v, DFS_WHITE);
  37. for (int i = 0; i < v; i++)
  38. if (dfs_num[i] == DFS_WHITE)
  39. printf("Component %d:", ++numCC), dfs(i), printf("\n");
  40. printf("There are %d connected components\n", numCC);
  41. }
  42.  
Success #stdin #stdout 0s 3476KB
stdin
9 7          
0 1         
1 2         
1 3         
2 3
3 4
6 7
6 8
stdout
Component 1: 4 3 2 1 0
Component 2: 5
Component 3: 7 8 6
There are 3 connected components