Pagini recente » Cod sursa (job #2347884) | Cod sursa (job #434248) | Cod sursa (job #2515277) | Cod sursa (job #2773459) | Cod sursa (job #2343427)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("1.in");
ofstream g("1.out");
struct edges{
int length = 0;
int neighbours[20] = { 0 };
bool visited = false;
int push_neighbour( int x ){
neighbours[ ++length ] = x;
}
};
void read_edges (edges e[], unsigned int &n, unsigned int &m){
f>>n>>m;
int a,b;
for(int i=1;i<=m;i++){
f>>a>>b;
e[a].push_neighbour(b);
}
}
void recursion (edges e[],int elems[], int poz, unsigned int n, unsigned int&k){
if(poz == n+1)
return;
e[poz].visited = true;
for(int i = 1; i<=e[poz].length; i++)
if( e[poz].neighbours[i]!=0 && !e[e[poz].neighbours[i]].visited)
recursion(e,elems,e[poz].neighbours[i],n,k);
elems[++k] = poz;
}
void solve(edges e[],int elems[], unsigned int n, unsigned int &k){
for(int i=1; i<=n; i++)
if(e[i].visited == false){
recursion(e,elems,i,n,k);
}
}
void print(int elems[], unsigned int k){
while( k ){
g<<elems[k]<<" ";
k--;
}
}
int main()
{
int elems[40100];
edges e[20010];
unsigned int n,m,k;
read_edges(e,n,m);
solve(e,elems,n,k);
print(elems,k);
return 0;
}