Pagini recente » Cod sursa (job #2827384) | Cod sursa (job #1632535) | Cod sursa (job #1029452) | Cod sursa (job #1980694) | Cod sursa (job #1038343)
#include <cstdio>
#define NMAX 10000
#define MMAX NMAX*5
#define IN "ctc.in"
#define OUT "ctc.out"
using namespace std;
void citire();
void rezolva();
void afisare();
void DFS(int);
void DFST(int);
int n,m;
int viz[NMAX],Vp[NMAX];
int M[NMAX][NMAX],Mt[NMAX][NMAX];
int main()
{
citire();
rezolva();
//afisare();
return 0;
}
void citire()
{
int i,x,y;
FILE*fin=fopen(IN,"r");
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d",&x,&y);
M[x][y]=1;
Mt[y][x]=1;
}
}
void rezolva()
{
int i;
for(i=1;i<=n;i++)
if(viz[i]==0) DFS(i);
for(i=n;i>=1;i--)
if(viz[Vp[i]]==1) DFST(Vp[i]);//pe graf transpus
}
void DFS(int a)
{
int St[NMAX],v,k,y,i,contor=0;
St[1]=a;
viz[a]=1;
k=1;
while(k>0)
{
v=St[k];
y=0;
for(i=1;i<=n;i++)
{
if(M[v][i] == 1 && viz[i] == 0)
{
y = i;
break;
}
}
if(y == 0) k--;
else
{
viz[y] = 1;
contor++;
Vp[contor]=y;
St[++k] = y;
}
contor++;
Vp[contor]=v;
}
contor++;
Vp[contor]=a;
}
void DFST(int a)
{
int St[NMAX],v,k,y,i,contor=0;
FILE*fout=fopen(OUT,"w");
fprintf(fout,"%d",a);
St[1]=a;
viz[a]=0;
k=1;
while(k>0)
{
v=St[k];
y=0;
for(i=1;i<=n;i++)
{
if(Mt[v][i] == 1 && viz[i] == 0)
{
y = i;
break;
}
}
if(y == 0) k--;
else
{
viz[y] = 0;
fprintf(fout," %d",y);
St[++k] = y;
}
}
fprintf(fout,"\n");
}