Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <set>
  5. #include <queue>
  6. using namespace std;
  7.  
  8. vector<int> bfs_(vector<vector<int>>& vertices, int& start){
  9.  
  10. queue<int> list_;
  11. list_.push(start);
  12. vector<int> passedVerticles(vertices.size());
  13. passedVerticles[start] = 1;
  14. while(list_.size()){
  15. int el = list_.front();
  16. list_.pop();
  17. for(int i = 0; i < vertices[el].size(); i++){
  18. if(passedVerticles[vertices[el][i]] != 0){
  19. continue;
  20. }
  21. list_.push(vertices[el][i]);
  22. passedVerticles[vertices[el][i]] = 1;
  23. }
  24. }
  25.  
  26. return passedVerticles;
  27. }
  28. struct out{
  29. out(int countcomp, vector<int> verticescomp){
  30. count_comp = countcomp;
  31. vertices_comp = verticescomp;
  32. }
  33. int count_comp;
  34. vector<int> vertices_comp;
  35. };
  36. out bfs(vector<vector<int>>& vertices){
  37.  
  38. vector<int> vertices_comp(vertices.size());
  39. int count_comp = 0;
  40. for(int i = 0; i < vertices.size(); i++){
  41. if(vertices_comp[i] == 0){
  42. vector<int> list = bfs_(vertices, i);
  43. for(int j = 0; j < list.size(); j++){
  44. if(list[j]){
  45. vertices_comp[j] = count_comp + 1;
  46. }
  47. }
  48. count_comp++;
  49. }
  50. }
  51. out ot(count_comp, vertices_comp);
  52. return ot;
  53. }
  54. int main() {
  55. ifstream inp("components.in");
  56. ofstream out("components.out");
  57. vector<int> list_adg;
  58. int n;
  59. int m;
  60. inp >> n >> m;
  61. set<vector<int>> edges;
  62. for(int i = 0; i < m; i++){
  63. int tmp[2];
  64. inp >> tmp[0] >> tmp[1];
  65. vector<int> edge;
  66. edge.push_back(tmp[0]);
  67. edge.push_back(tmp[1]);
  68. edges.insert(edge);
  69. }
  70. vector<vector<int>> vertices(n);
  71. for(int i = 0; i < n; i++){
  72. vector<int> vertices_;
  73. vertices[i] = vertices_;
  74. }
  75. for(int i = 0; i < n; i++){
  76. for(int j = 0; j < n; j++){
  77. vector<int> tmp;
  78. tmp.push_back(i+1);
  79. tmp.push_back(j+1);
  80. if(edges.count(tmp) != 0){
  81. vertices[i].push_back(j);
  82. vertices[j].push_back(i);
  83. }
  84. }
  85. }
  86. struct out tmp = bfs(vertices);
  87. string line = "";
  88. line += to_string(tmp.count_comp) + "\n";
  89. for(int i = 0; i < tmp.vertices_comp.size(); i++){
  90. line += to_string(tmp.vertices_comp[i]) + " ";
  91. }
  92. out << line;
  93.  
  94.  
  95. return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement