Cod sursa(job #651246)

Utilizator ramona.zahariaRamona ramona.zaharia Data 20 decembrie 2011 00:42:57
Problema Componente tare conexe Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.31 kb
#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;}