Advertisement
Guest User

SpyHunter

a guest
Dec 11th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void amtNode(vector<size_t> &SpyN, size_t &x, size_t y) // количество подчинённых
  6. {
  7.     for (size_t i = 0; i<SpyN.size(); i++)
  8.     {
  9.         if (SpyN[y] == y) continue;
  10.         if (SpyN[i] == y){
  11.             x++;
  12.             amtNode(SpyN,x,i);
  13.         }
  14.     }
  15.     return;
  16. }
  17.  
  18. void Investigation(vector<size_t> &SpyN, vector<size_t> &Suspected, size_t suspect) // раследование
  19. {
  20.     bool ChekChain = true;
  21.     for (size_t i = 0; i < Suspected.size(); i++)
  22.     {
  23.         if (suspect == SpyN[Suspected[i]]){ // Если страший
  24.             ChekChain = false;
  25.             break;
  26.         }
  27.         if (Suspected[i] == SpyN[suspect]){ // Если младший
  28.             ChekChain = false;
  29.             Suspected[i] = suspect;
  30.             break;
  31.         }
  32.     }
  33.     if (ChekChain) Suspected.push_back(suspect);
  34. }
  35.  
  36. void Intelligence(vector<size_t> &SpyN, vector<size_t> &Suspected, size_t SL) // разведка
  37. {
  38.     for(size_t i = 0; i < SpyN.size(); i++)
  39.     {
  40.         size_t x = 1;
  41.         amtNode(SpyN,x,i);
  42.         if(x >= SL) Investigation(SpyN,Suspected,i);
  43.     }
  44. }
  45.  
  46. void Arrest(vector<size_t> &SpyN, vector<size_t> &Suspected) // арест
  47. {
  48.     for (size_t i = 0; i < Suspected.size(); i++)
  49.     {
  50.         for(size_t j = 0; j < SpyN.size(); j++)
  51.         {
  52.             if (j == Suspected[i]) continue;
  53.             if(SpyN[j] == Suspected[i]) SpyN[j] = SpyN.size();
  54.         }
  55.         SpyN[Suspected[i]] = SpyN.size();
  56.     }
  57. }
  58.  
  59. void Hunting(vector<size_t> SpyN, vector<size_t> &Arrested, size_t SL)
  60. {
  61.     vector<size_t> Suspected; // подозреваемые
  62.     Intelligence(SpyN,Suspected,SL);
  63.     if(Suspected.size() == 0) return; // условие выхода
  64.     Arrested.insert(Arrested.end(), Suspected.begin(), Suspected.end());
  65.     Arrest(SpyN,Suspected);
  66.     Hunting(SpyN,Arrested,SL);
  67. }
  68.  
  69. int main()
  70. {
  71.     vector<size_t> SpyN(14); // шпионская сеть
  72.     vector<size_t> Arrested; // арестованые
  73.  
  74.     SpyN[0] = SpyN.size();
  75.  
  76.     SpyN[1] = 0;
  77.     SpyN[3] = 1; SpyN[4] = 1; SpyN[6] = 1;
  78.     SpyN[12]= 3;              SpyN[11]= 6; SpyN[13]= 6;
  79.  
  80.     SpyN[2] = 0;
  81.     SpyN[7] = 2; SpyN[5] = 2;
  82.                  SpyN[8] = 5; SpyN[9] = 5; SpyN[10] = 5;
  83.  
  84.     Hunting(SpyN, Arrested, 3);
  85.  
  86.     for (size_t i = 0; i < SpyN.size(); i++) cout << SpyN[i] << " "; cout << endl;
  87.     for (size_t i = 0; i < Arrested.size(); i++) cout << Arrested[i] << " ";
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement