Advertisement
allia

DFS

Dec 15th, 2020 (edited)
545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Graph
  6. {
  7.   private:
  8.   bool orient;
  9.   int n, **arr, **vse_rebra, shet_reber, comp;
  10.  
  11.   public:
  12.   Graph (int **matrix, int x, int shet)
  13.   {
  14.     n = x;
  15.     arr = matrix;
  16.     shet_reber = shet;
  17.   }
  18.   void spisok ();
  19.   void get_spisok_smejnosti();
  20.   void get_spisok_reber();
  21.   void deep(int x, int *R, int &comp);
  22.   int* get_comp(int x);
  23. };
  24.  
  25. void Graph::get_spisok_reber()
  26.   {
  27.     for (int i=0; i<shet_reber; i++)
  28.     {
  29.       for (int j=0; j<2; j++)
  30.       {
  31.         cout.width(3);
  32.         cout << vse_rebra[i][j] << " ";
  33.       }
  34.      cout << endl;
  35.     }
  36.   }
  37.  
  38. void Graph::spisok ()
  39.   {
  40.     int shet = 0;
  41.  
  42.      vse_rebra = new int*[shet_reber];
  43.  
  44.      for ( int i = 0; i < shet_reber; i++)
  45.        vse_rebra[i] = new int[2];
  46.  
  47.     for (int i =0; i < n; i++)
  48.      for (int j = i; j < n; j++)  
  49.      if (arr[i][j] == 1)
  50.      {
  51.        vse_rebra[shet][0] = i+1;
  52.        vse_rebra[shet][1] = j+1;
  53.        shet++;
  54.      }
  55.   }
  56.  
  57.   void Graph::get_spisok_smejnosti()
  58.   {
  59.     for (int i =0; i < n; i++)
  60.     {
  61.       cout << i+1 << ":" << " ";
  62.        for (int j = 0; j < n; j++)  
  63.         if (arr[i][j] == 1)
  64.          cout << j+1 << " ";
  65.         cout << endl;
  66.     }
  67.   }
  68.  
  69.  
  70. void Graph::deep(int x, int *R, int &comp)
  71. {
  72.   R[x] = x+1;
  73.   //cout << R[x] << " ";
  74.   for (int i = 0; i < n; i++)
  75.     if (arr[x][i] != 0 && R[i] == 0)
  76.       deep(i, R, comp);
  77. }
  78.  
  79. int* Graph::get_comp(int x)
  80. {
  81.   int i, comp = 0, *R = new int[n];
  82.  
  83.   for (i = 0; i < n; i++)
  84.    R[i] = 0;
  85.  
  86.      deep(x, R, comp);
  87.    
  88.   return R;
  89. }
  90.  
  91.  
  92. int main()
  93. {
  94.  int n, shet_reber = 0, x;
  95.  cin >> n >> x;
  96.  
  97. int **arr = new int*[n];
  98. int *itog = new int[n];
  99.  
  100. for ( int i = 0; i < n; i++)
  101.      arr[i] = new int[n];
  102.    
  103. for (int i =0; i < n; i++)
  104.   for (int j =0; j < n; j++)  
  105.      {
  106.        cin >> arr[i][j];
  107.         if (arr[i][j] == 1)
  108.          shet_reber++;
  109.      }
  110.  
  111.  shet_reber /= 2;
  112.  Graph object(arr, n, shet_reber);
  113.  itog = object.get_comp(x-1);
  114.  
  115. for (int i = 0; i < n; i++)
  116.  if (itog[i] != 0)
  117.   cout << itog[i] << " ";
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement