Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <queue>
  5.  
  6. using namespace std;
  7. ifstream fin("components.in");
  8. ofstream fout("components.out");
  9.  
  10. void bfs(int StartNode, vector <int>& Components, queue <int>& Nodes, vector <vector<bool>>& Matrix, int& ComponentNumber)
  11. {
  12.  
  13. Components[Nodes.front()] = ComponentNumber;
  14. for (int i = 0; i < Components.size(); ++i) //searching for neighbors
  15. {
  16. if (Matrix[Nodes.front()][i] == 1 && Components[i] == 0)
  17. {
  18. Nodes.push(i);
  19. Components[i] = ComponentNumber;
  20. }
  21. }
  22. Nodes.pop();
  23.  
  24. if (Nodes.empty())
  25. {
  26. ++ComponentNumber;
  27. return;
  28. }
  29. else
  30. bfs(Nodes.front(), Components, Nodes, Matrix, ComponentNumber);
  31. }
  32.  
  33. int main()
  34. {
  35. int V, E, FirstNode, SecondNode, ComponentNumber = 1;
  36. queue <int> Nodes;
  37. fin >> V >> E;
  38. vector <vector<bool>> Matrix(V, vector<bool>(V));
  39. vector<int> Components(V);
  40.  
  41. for (int i = 0; i < V; ++i)
  42. for (int j = 0; j < V; ++j) //initilazing matrix
  43. Matrix[i][j] = 0;
  44.  
  45. for (int i = 0; i < V; ++i)
  46. Components[i] = 0;
  47.  
  48. for (int i = 0; i < E; ++i) //filling matrix with edges
  49. {
  50. fin >> FirstNode >> SecondNode;
  51. Matrix[FirstNode - 1][SecondNode - 1] = 1;
  52. Matrix[SecondNode - 1][FirstNode - 1] = 1;
  53. }
  54.  
  55. for (int i = 0; i < V; ++i)
  56. {
  57. if (Components[i] == 0)
  58. {
  59. Nodes.push(i);
  60. bfs(Nodes.front(), Components, Nodes, Matrix, ComponentNumber);
  61. }
  62. }
  63.  
  64. fout << ComponentNumber - 1 << endl;
  65. for (int i = 0; i < Components.size(); ++i)
  66. fout << Components[i] << ' ';
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement