Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void amtNode(vector<size_t> &SpyN, size_t &x, size_t y) // количество подчинённых
- {
- for (size_t i = 0; i<SpyN.size(); i++)
- {
- if (SpyN[y] == y) continue;
- if (SpyN[i] == y){
- x++;
- amtNode(SpyN,x,i);
- }
- }
- return;
- }
- void Investigation(vector<size_t> &SpyN, vector<size_t> &Suspected, size_t suspect) // раследование
- {
- bool ChekChain = true;
- for (size_t i = 0; i < Suspected.size(); i++)
- {
- if (suspect == SpyN[Suspected[i]]){ // Если страший
- ChekChain = false;
- break;
- }
- if (Suspected[i] == SpyN[suspect]){ // Если младший
- ChekChain = false;
- Suspected[i] = suspect;
- break;
- }
- }
- if (ChekChain) Suspected.push_back(suspect);
- }
- void Intelligence(vector<size_t> &SpyN, vector<size_t> &Suspected, size_t SL) // разведка
- {
- for(size_t i = 0; i < SpyN.size(); i++)
- {
- size_t x = 1;
- amtNode(SpyN,x,i);
- if(x >= SL) Investigation(SpyN,Suspected,i);
- }
- }
- void Arrest(vector<size_t> &SpyN, vector<size_t> &Suspected) // арест
- {
- for (size_t i = 0; i < Suspected.size(); i++)
- {
- for(size_t j = 0; j < SpyN.size(); j++)
- {
- if (j == Suspected[i]) continue;
- if(SpyN[j] == Suspected[i]) SpyN[j] = SpyN.size();
- }
- SpyN[Suspected[i]] = SpyN.size();
- }
- }
- void Hunting(vector<size_t> SpyN, vector<size_t> &Arrested, size_t SL)
- {
- vector<size_t> Suspected; // подозреваемые
- Intelligence(SpyN,Suspected,SL);
- if(Suspected.size() == 0) return; // условие выхода
- Arrested.insert(Arrested.end(), Suspected.begin(), Suspected.end());
- Arrest(SpyN,Suspected);
- Hunting(SpyN,Arrested,SL);
- }
- int main()
- {
- vector<size_t> SpyN(14); // шпионская сеть
- vector<size_t> Arrested; // арестованые
- SpyN[0] = SpyN.size();
- SpyN[1] = 0;
- SpyN[3] = 1; SpyN[4] = 1; SpyN[6] = 1;
- SpyN[12]= 3; SpyN[11]= 6; SpyN[13]= 6;
- SpyN[2] = 0;
- SpyN[7] = 2; SpyN[5] = 2;
- SpyN[8] = 5; SpyN[9] = 5; SpyN[10] = 5;
- Hunting(SpyN, Arrested, 3);
- for (size_t i = 0; i < SpyN.size(); i++) cout << SpyN[i] << " "; cout << endl;
- for (size_t i = 0; i < Arrested.size(); i++) cout << Arrested[i] << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement