// 186373.cpp : Defines the entry point for the console application.
#include <vector>
#include <iostream>
using namespace std;
vector < vector<int> > g, gr; //g - graf gr transponirovanny graf
vector<char> used; //pometki vershin
vector<int> order, component;
void dfs1 (int v) {
used[v] = true;
int n=g[v].size();
for (size_t i=0; i<n; ++i)
if (!used[ g[v][i] ])
dfs1 (g[v][i]);
order.push_back (v);
}
void dfs2 (int v) {
used[v] = true;
component.push_back (v);
for (size_t i=0; i<gr[v].size(); ++i)
if (!used[ gr[v][i] ])
dfs2 (gr[v][i]);
}
int main() {
int n;
//... чтение n ...
cout<<"vvedite kolichestvo vershin"<<endl;
cin >>n;
g.resize(n);
gr.resize(n);
for (;;) {
int a, b;
// ... чтение очередного ребра (a,b) ...
cout<<"vvedite rebro"<<endl;
cin >>a;
if (a==0) break;
if (a>n|| a<0) { cout<<"nepravilny index"<<endl; continue;}
cin >>b;
if (b>n || b<=0) { cout<<"nepravilny index"<<endl; continue;}
g[a-1].push_back (b-1);
gr[b-1].push_back (a-1);
}
used.assign (n, false);
for (int i=0; i<n; ++i)
if (!used[i])
dfs1 (i);
used.assign (n, false);
for (int i=0; i<n; ++i) {
int v = order[n-1-i];
if (!used[v]) {
dfs2 (v);
// ... вывод очередной component ...
cout << "componenta silnoy svyaznosti"<< endl;
for (int k=0; k<component.size(); ++k) {
cout << component[k]+1;
}
cout << endl;
component.clear();
}
}
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.