24. Se da un graf prin urmatoarele informatii: n m - Nr. de noduri si nr. de arce i1 j1 Ä¿ i2 j2 ³ i3 j3 ³ . ³ Arcele . ³ . ³ im jm ÄÙ a) Sa se construiasca reprezentarea prin liste de adiacenta directa a grafului dat. La aceast punct puteti folosi modulul LISTAINT.H / LISTAINT.CPP care contine tipurile: struct Element{ int data; Element* link; }; typedef Element* Lista; si functia: void insert(Lista& li, int nr); care insereaza intregul "nr" intr-o lista inlantuita cu elementele pastrate in ordine crescatoare. b) Se citesc doua noduri i si j. Consultind reprezentarea construita, sa se se determine daca exista un arc de la i la j. c) Se citeste un nod k. Pornind de la nodul k, sa se traverseze in adincime graful (DFS), afisind nodurile vizitate. EXEMPLU DE RULARE: Introduceti numarul de noduri n: 7 Introduceti numarul de arce m: 10 Introduceti arcele: 1 2 1 3 2 4 2 5 3 5 5 1 5 6 5 7 6 7 7 5 Introduceti doua noduri: 3 5 Exista arc de la 3 la 5! Introduceti nodul de la care incepe traversarea: 1 Secventa DFS pornind de la nodul: 1 2 4 5 6 7 3 ===================================================== #include "listaint.h" void insert(Lista& li, int nr) { Element* q; Element* p = new Element; p->data = nr; if(li==0 || nr<=li->data){ p->link = li; li = p; } else { q = li; while(q->link!=0 && nr>q->link->data) q = q->link; p->link = q->link; q->link = p; } } void creare() { int i,m,e1,e2; printf("\n introduceti nr de noduri n :"); scanf("%d",&n); printf("\n introduceti nr de arce m:"); scanf("%d",&m); printf("\n introduceti arcele : \n"); for(i=1;i<=m;i++) { scanf("%d%d",&e1,&e2); insert(tab[e1],e2); } } void arc() { int a,b; Lista p; printf("\n introduceti doua noduri :"); scanf("%d%d",&a,&b); if((p=tab[a])!=0) { while(p->link !=0 && p->data !=b) p=p->link; if(p->data==b) printf("\n intre nodul %d si nodul %d exista arc",a,b); else printf("\n intre nodul %d si nodul %d nu exista arc",a,b); } } void dfs(int a,Lista p) { Lista q=p; int j; mark[a]=1; printf(" %d",a); while(q!=0) { j=q->data; if(mark[j]==0) dfs(j,tab[j]); q=q->link; } } */ struct Element{ int data; Element* link; }; typedef Element* Lista; Lista tab[50]; int mark[50]; int n; void insert(Lista& li, int nr); */ #include #include #include"listaint.cpp" void main(void) { int k; clrscr(); creare(); arc(); printf("\n introduceti nodul de la care incepe traversarea :"); scanf("%d",&k); printf("\n traversare in adincime :"); dfs(k,tab[k]); getch(); }