Pagini recente » Clasament test123456 | Cod sursa (job #2889632) | Cod sursa (job #1765033) | Cod sursa (job #1638656) | Cod sursa (job #651246)
Cod sursa(job #651246)
#include<stdio.h>
#define N 100001
struct nod {int inf;
nod *next;};
nod *vect[N], *coada[N];
int n,m,a,b,viz[N],cont,stiva[N],baza[N],nr[N],nrc,number,varf;
void cit()
{nod *p;
//fopen("sortaret.in","r");
//fopen("sortaret.out","w");
scanf("%d%d",&n, &m);
for(cont=1;cont<=m;++cont)
{scanf("%d%d", &a, &b);
p=new nod;
p->inf=b;
p->next=vect[a];
vect[a]=p;}
}
void verificare(int rez)
{nod *p;
viz[rez]=1;
stiva[varf+1]=rez;
nr[rez]=number++;
baza[rez]=nr[rez];
for(p=vect[rez];p;p=p->next)
{if(viz[p->inf]) verificare(p->inf);
baza[rez]=(baza[rez]<baza[p->inf])?baza[rez]:baza[p->inf);}
if(baza[rez]==nr[rez])
{nrc++;
for(;;)
{p->new nod;
p->inf=stiva[varf];
viz[stiva[varf]]=2;
p->next=coada[nrc];
coada[nrc]=p;
varf=varf-1;
if(stiva[varf++]==rez)
break;}
}
}
void fct()
{for(cont=1;cont<=n;++cont)
id(viz[1]!=0)
{number=0;
verificare(cont);}
}
void afis()
{nod *p;
printf("numarul componentelor tare conexe");
printf("%d", nrc);
for(cont=1;cont<=nrc;++cont)
{printf("rand nou"); printf("\n");
for(p=coada[cont];p;p=p->next)
printf("%d", p->inf);
}
}
int main()
{printf("componente tare conexe=");
cit();
fct();
afis();
return 0;}