@Rushpil

В чем суть алгоритма описанного в коде?

Я не могу понять,каков алгоритм в данном коде. Можете объяснить пожалуйста,желательно с точки зрения python,т.к. я буду переводить код с C++ на python.
#include <bits/stdc++.h>

using namespace std;

int N;

vector<int> adj[1001];
vector<int> victim(1001,0);
vector<int> suspect(1001,1);

void dfsV(int v){
  suspect[v] = 0;

  for(auto u = adj[v].begin(); u != adj[v].end(); u++){
    int w = (*u);
    if(suspect[w]) dfsV(w);
  }
  
}

void dfsM(int v){
  for(auto u = adj[v].begin(); u != adj[v].end(); u++){
    int w = (*u);
    if(suspect[w]) dfsM(w);
    if(victim[w]){
      suspect[v] = 0;
      victim[v] = 1;
    }
  }
}




int main(){
  cin >> N;
  
  string a;
  
  while(1){
    cin >> a;
    if(a == "BLOOD") break;
    int numb;
    istringstream(a) >> numb;
    int b = 0;
    cin >> b;
    adj[numb].push_back(b);
    //cout << a << "~" << b << endl;
  }


  int v;
  while(scanf("%d\n",&v) != EOF){
    victim[v] = 1;
    dfsV(v);
  }

  for(int i = 1; i <= N; i++){
    if(!victim[i]) dfsM(i);
  }

  int flag = 0;
  for(int i = 1; i <= N; i++){
    if(suspect[i]){
      cout << i << " ";
      flag = 1;
    }
  }
  if(flag)cout << endl;
  else cout << "0\n";
  
  

  return 0;
}
  • Вопрос задан
  • 209 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы