Advertisement
Guest User

Untitled

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