Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void depth_first_search_step(vector< vector< int > > &edge, int connected_top[], int act_connected_top, int top, bool visited[]){
  7.     if(visited[top]==true)
  8.        return;
  9.     visited[top] = true;
  10.     connected_top[top] = act_connected_top;
  11.     for(int i = 0; i<edge[top].size(); i++){
  12.     if(visited[edge[top][i]]==false)
  13.         depth_first_search_step(edge, connected_top, act_connected_top, edge[top][i], visited);
  14.     }
  15.     return;
  16. }
  17.  
  18. void depth_first_search(vector< vector< int > > &edge, int connected_top[], int act_connected_top, int top){
  19.     bool visited[edge.size()];
  20.     for(int i=0; i<edge.size(); i++)
  21.         visited[i] = false;
  22.      
  23.     depth_first_search_step(edge, connected_top, act_connected_top, top, visited);
  24.     return;
  25. }
  26.  
  27.  
  28. //zmieniłem nazwę tej funkcji to nie było test, tylko chyba check_graph
  29. void test(){
  30.  
  31.     int set_numbers;
  32.     vector< vector< int > > edge;
  33.     vector< int > pom;
  34.      
  35.     cin >> set_numbers;
  36.      
  37.     for(int tmpEdges=0; tmpEdges<set_numbers; tmpEdges++){
  38.     edge.clear();
  39.    
  40.     int edgesQuantity;
  41.     cin >> edgesQuantity;
  42.      
  43.     for(int l=0; l<edgesQuantity; l++){
  44.         int top1,top2;
  45.    
  46.         cin >> top1 >> top2;
  47.          
  48.         while(edge.size()<top1 || edge.size()<top2)
  49.             edge.push_back(pom);
  50.            
  51.         edge[top1-1].push_back(top2-1);
  52.         edge[top2-1].push_back(top1-1);
  53.     }
  54.  
  55.     int connected_top[edge.size()-1];
  56.     for(int i=0; i<edge.size(); i++)
  57.         connected_top[i] = 0;
  58.      
  59.     int act_connected_top = 0;
  60.      
  61.     for(int i=0; i<edge.size(); i++){
  62.         if(connected_top[i]==0){
  63.             act_connected_top++;
  64.             depth_first_search(edge, connected_top, act_connected_top, i);
  65.         }
  66.     }
  67.      
  68.     for(int i=0; i<edge.size(); i++){
  69.         act_connected_top = connected_top[i];
  70.          
  71.         bool occurred = false;
  72.          
  73.         for(int j=0; j<i; j++){
  74.             if(connected_top[j] == act_connected_top){
  75.                 occurred = true;
  76.                 break;
  77.             }
  78.         }
  79.          
  80.         if(!occurred) {
  81.             if(tmpEdges!=0 && act_connected_top == 1)
  82.                 cout << endl << endl;
  83.             else if(act_connected_top != 1)
  84.                 cout << endl;
  85.              
  86.             cout << connected_top[i] << ":";
  87.             for(int j=i; j<edge.size(); j++){
  88.                 if(connected_top[j]==act_connected_top)
  89.                     cout << " " << j+1;
  90.             }
  91.         }
  92.     }
  93. }
  94.  
  95. return;}
  96.  
  97. int main() {
  98.  test();
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement