Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AstronomieBiofizicaBiologieBotanicaCartiChimieCopii
Educatie civicaFabule ghicitoriFizicaGramaticaJocLiteratura romanaLogica
MatematicaPoeziiPsihologie psihiatrieSociologie


SORTAREA TOPOLOGICA

Matematica



+ Font mai mare | - Font mai mic



SORTAREA TOPOLOGICA

Se da un graf orientat. Orientarea muchiilor corespunde unei relatii de ordine de la nodul sursa catre cel destinatie. Ni se cere sa asezam nodurile in asa fel incat pentru orice muchie (u,v), u sa apara inaintea lui v. Aceasta operatie se numeste sortare topologica.



Sortarea topologica are sens numai daca este aplicata asupra unui graf orientat si aciclic. De ce? Daca nu ar fi graf orientat, nu am avea despre ce ordine sa discutam. Iar un ciclu ar fi indeajuns pentru a nu putea stabili o ordine intre nodurile care il alcatuiesc. Un graf orientat este aciclic daca si numai daca explorarea lui in adancime nu contine arce de revenire.

Sa consideram urmatorul exemplu:

Fig. 3.1

Ei bine, de aici si pana la a obtine o succesiune de noduri ordonate nu este decat un singur pas: avem grija sa asezam nodul radacina al fiecarui subarbore intr-o stiva, iar pentru afisare scoatem pe rand cate un nod din stiva tiparind odata cu el si nodurile din arbore sau in ordinea obtinuta.

Fig 3.2

Pentru un graf dat pot exista mai multe insiruiri de noduri care sa respecte cerinta.

O varianta a problemei anterioare este descrisa in formularea urmatoare:

O sortare topologica a varfurilor unui graf orientat aciclic este o operatie de ordonare liniara a varfurilor, astfel incat, daca exista un arc ( i j ), atunci i apare inaintea lui j in aceasta ordonare.

Algoritm pentru sortarea topologica

Date de intrare

In fisierul de intrare sortaret.in vom avea pe prima linie doua numere intregi N si M. Pe fiecare dintre urmatoarele M linii se vor afla cate doua numere intregi, separate intre ele printr-un spatiu, X si Y, cu semnificatia ca exista arc de la nodul X catre nodul Y

Date de iesire

Fisierul de iesire sortaret.out va contine pe o singura linie N numere separate intre ele prin spatii, care reprezinta sortarea topologica a nodurilor grafului dat. Daca exista mai multe solutii se va afisa oricare.

Restrictii

1 ≤ N ≤ 50000

1 ≤ M ≤ 100000

Pot exista mai multe arce intre doua noduri X si Y

Exemplu

sortaret.in

sortaret.out

Fig. 3.3

#include <fstream>

#include <stack>

using namespace std;

#define NUME 'sortaret'

ifstream fi(NUME'.in');

ofstream fo(NUME'.out');

#define MAXN 50001

int N, M, gradin[MAXN];

int Used[MAXN];

stack<int> C;

struct item *L[MAXN];

void df(int s)

C.push(s);

inline void add(int a, int b) ;

L[a] = p;

gradin[b] ++;

int main()

for (int i = 1; i <= N; ++i)

if (gradin[i] == 0)

df(i);

while (!C.empty())

return 0;



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2339
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved