Sortare Topologica

Potrebbero piacerti anche

Sei sulla pagina 1di 2

#include<iostream> #include<fstream.

h> using namespace std; struct nod{ int inf; nod *next; }; int g[1000][1000],nr_noduri,nr_muchii,i,j,a,b,w=0,nod_marcat[1000]; //g e matricea de adiacenta// nod *cap,*u,*p; int verifica_grad_exterior(int i)//asta verifica daca in nodul i intra vreo much ie. daca intra returneaza zero. altfel returneaza 1// { for(j=1;j<=nr_noduri;j++) if(g[i][j]!=0)//daca in i intra vreo muchie// return 0; return 1; } void insereaza_nod(int i)//asta iti creeaza o lista de noduri in ordinea vizitar ii// { if(cap==NULL) { cap=new nod; cap->inf=i; cap->next=NULL; u=cap; } else { p=new nod; p->inf=i; p->next=u; u=p; } } int main(){ ifstream f("graf.txt"); f>>nr_noduri; f>>nr_muchii; //citire muchii si completare matrice adiacenta:// for(i=0;i<nr_muchii;i++) { f>>a>>b; g[a][b]=1; } do { for(i=nr_noduri;i>=1;i--)//parcurge toate nodurile// if(verifica_grad_exterior(i)==1 && nod_marcat[i]==0)//daca in i nu intra nicio muchie si i nu a fost marcat// { insereaza_nod(i);//baga i in lista// w++;

nod_marcat[i]=1;//il marcheaza pe i// for(j=1;j<=nr_noduri;j++) g[j][i]=0;//sterge din matricea de adiacenta toa te muchiile de forma (ji) adica alea care intra in i// } }while(w<nr_noduri);//toata povestea de mai sus se face cata vreme mai s unt noduri nevizitate in graf// p=u; while(p!=NULL) { cout<<p->inf<<" "; p=p->next; }//afiseaza lista de noduri// return 0; }

Potrebbero piacerti anche