Pagini recente » Cod sursa (job #806831) | Cod sursa (job #1438730) | Cod sursa (job #1684280) | Cod sursa (job #1044828) | Cod sursa (job #650890)
Cod sursa(job #650890)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 100003
typedef struct Node{int info; struct Node *next;}Node;
Node *G[NMAX];
FILE *inf,*outf;
int viz[NMAX],N,M;
int succesori[NMAX],predecesori[NMAX];
void citire()
{
inf=fopen("ctc.in","r");
int i,z,y;
fscanf(inf,"%d %d",&N,&M);
for(i=1;i<=M;i++)
{
fscanf(inf,"%d %d",&z,&y);
Node *p;
if(!(p=(Node*)malloc(sizeof(Node)))) return ;
p->info=y;
p->next=G[z];
G[z]=p;
}
}
void Dfs1(int x)
{
Node *p;
succesori[x]=1;
for(p=G[x];p;p=p->next)
if(succesori[p->info]==0)
{
Dfs1(p->info);
}
}
void Dfs2(int x)
{
Node *p;
predecesori[x]=1;
for(p=G[x];p;p=p->next)
if(predecesori[p->info]==0)
{
Dfs2(p->info);
}
}
int main()
{
int i,j,contor=0,k,nrcomp=0;
outf=fopen("ctc.out","w");
citire();
nrcomp=1;
for(i=1;i<=N;i++)
if(succesori[i]==0)
{succesori[i]=nrcomp;
Dfs1(i);
Dfs2(i);
for(j=1;j<=N;j++)
if(succesori[j]!=predecesori[j]) succesori[j]=predecesori[j]=0;
nrcomp++;
}
fprintf(outf,"%d",nrcomp);
for(i=1;i<nrcomp;i++)
{
for(j=1;j<=N;j++)
if(succesori[j]==i) fprintf(outf,"%d",j);
fprintf(outf,"\n");
}
fclose(inf);
fclose(outf);
return 0;
}