Pagini recente » Cod sursa (job #1662097) | Autentificare | Cod sursa (job #1432632) | Cod sursa (job #608857) | Cod sursa (job #2257968)
#include <fstream>
#define NMAX 1000
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
int n,m, A[NMAX][NMAX],viz[NMAX],nr=1,postordine[NMAX],AT[NMAX][NMAX];
void citire();
void afisare();
void parcurgere(int k);
void parcurgere2(int k);
int main()
{
citire();
// afisare();
//fout<<'\n';
int ok=1,i,cc=1;
while(ok)
{ok=0;
for(i=1;i<=n;i++)
if(viz[i]==0)
{ok=1;
parcurgere(i);
}
}
for(i=n;i>=1;i--)
if(viz[postordine[i]])
{
// fout<<"componenta tare-conexa "<<cc++<<": ";
parcurgere2(postordine[i]);
fout<<'\n';
}
return 0;
}
void citire()
{int x,y;
fin>>n>>m;
while(m--)
{
fin>>x>>y;
A[x][0]++;
A[x][A[x][0]]=y;
AT[y][0]++;
AT[y][AT[y][0]]=x;
}
}
void parcurgere(int k)
{
viz[k]=1;
int i;
for(i=1;i<=A[k][0];i++)
if(viz[A[k][i]]==0)
parcurgere(A[k][i]);
postordine[nr++]=k;
}
void parcurgere2(int k)
{
viz[k]=0;
int i;
fout<<k<<" ";
for(i=1;i<=AT[k][0];i++)
if(viz[AT[k][i]])
parcurgere2(AT[k][i]);
}
void afisare()
{int i,j;
for(i=1;i<=n;i++)
{fout<<i<<": ";
for(j=1;j<=A[i][0];j++)
fout<<A[i][j]<<" ";
fout<<'\n';
}
}