Sunteți pe pagina 1din 3

Algoritmica grafelor

Laborator 1

Reprezentarea grafurilor sub


formă de liste de adiacenţă

Fie V o mulţime nevidă şi E  V *V . Perechea G=(V*E) oartă numele de graf,


unde V reprezintă mulţimea nodurilor care compun graful şi E mulţimea muchiilor
care unesc nodurile grafului.
Există mai multe metode de memorare a grafurilor, fiecare având o clasă aparte
de situaţii unde sunt aplicabile. Cele mai utilizate sunt matricea de adiacenţă, listele
de adiacenţă şi multilistele de adiacenţă.
Operaţiile care se vor efectua asupra grafurilor sunt:
- iniţializarea grafului
- citirea grafului
- tipărirea grafului
- citirea muchiei
- adăugarea unei noi muchii
- distrugerea grafului
În continuare vom implementa operaţiile 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