Sunteți pe pagina 1din 3

Algoritmica grafelor

Laborator 1 Reprezentarea grafurilor sub form de liste de adiacen


Fie V o mulime nevid i E V *V . Perechea G=(V*E) oart numele de graf, unde V reprezint mulimea nodurilor care compun graful i E mulimea muchiilor care unesc nodurile grafului. Exist mai multe metode de memorare a grafurilor, fiecare avnd o clas aparte de situaii unde sunt aplicabile. Cele mai utilizate sunt matricea de adiacen, listele de adiacen i multilistele de adiacen. Operaiile care se vor efectua asupra grafurilor sunt: - iniializarea grafului - citirea grafului - tiprirea grafului - citirea muchiei - adugarea unei noi muchii - distrugerea grafului n continuare vom implementa operaiile pe graf cu ajutorul listelor de adiacen.
#include<stdio.h> #include<conio.h> #include<alloc.h> #define MaxVertex 20 struct muchie{ int sursa; int dest; }; typedef struct muchie muchie; struct list{ int val; struct list *next; }; typedef struct list list; typedef list* plist; typedef plist graph[MaxVertex]; void adMuchie(graph *g, muchie e) { list *temp,*aux; if((e.sursa<0)||(e.dest<0)||(e.sursa>=20)||(e.dest>=20)) return; temp=(*g)[e.sursa]; aux=new list; 1

Algoritmica grafelor aux->val=e.dest; aux->next=NULL; if(temp==NULL) (*g)[e.sursa]=aux; else { while(temp->next!=NULL) temp=temp->next; temp->next=aux; } } int citireMuchie(muchie *e) { printf("\nSursa=:"); scanf("%d",&e->sursa); printf("\nDestinatia=:"); scanf("%d",&e->dest); if((e->sursa<0)||(e->dest<0)||(e->sursa>=20)||(e->dest>=20)) return 0; else return 1; } void citireGraph(graph *g) { muchie e; while(citireMuchie(&e)==1) adMuchie(g,e); } void initGraph(graph *g) { int i; for(i=0;i<20;i++) (*g)[i]=NULL; } void printGraph(graph *g) { int i; list *temp; for(i=0;i<20;i++) { printf("\nNodul %d: ",i); temp=(*g)[i]; while(temp!=NULL) { printf("%d ",temp->val); temp=temp->next; } } } void destroyGraph(graph *g) { plist temp,aux; int i; for(i=0;i<20;i++) { temp=(*g)[i]; while(temp!=NULL) 2

Algoritmica grafelor { aux=temp->next; free(temp); temp=aux; } } } void main() { graph g; initGraph(&g); printf("\nCitie graf. Terminati cu nod<0\n"); citireGraph(&g); printf("\nGraful citit este:"); printGraph(&g); destroyGraph(&g); getch(); }

S-ar putea să vă placă și