Sunteți pe pagina 1din 22

Grafuri definiii, reprezentri,

parcurgeri

Definiii

G2 este un subgraf al grafului G1


G2 este un graf parial al grafului G1

Definiii
Graf direcionat
nu neaparat distincte

V este vrf izolat dac pentru orice e, u nu este incident cu e

Grafuri

Exemplul 1 - graf

Exemplul 1 cont.

Exemplul 2 - digraf

Exemplul 3 graf direcionat

Exemplul 4 graf ponderat

Parcurgeri

Parcurgerea n lime

Parcurgerea n lime

Parcurgerea n lime

Exemplul 1:

3
6

Fie graful din figura urmtoare i

4
5

timp

t=1

t=2

2, 3, 4, 7

t=3

3, 4, 7, 5

t=4

4, 7, 5, 6

t=5

7, 5, 6

t=6

5, 6

t=7

t=8

Exemplul 2:

.........................................................................................................
.........................................................................................................

Implementare BF
#include <stdio.h>
#include <conio.h>

int insereaza_coada(int *coada,int n, int vf)


{ coada[n]=vf;
n++;
return n;
}
int extrage_coada(int *coada,int n, int *vf)
{ int i;
*vf=coada[0];
for(i=0;i<n-1;i++)
coada[i]=coada[i+1];
n--;
return n;
}

Implementare BF
void breadth_first(int v0,int **a,int n)
{ int *coada, *m,i,nr_c,k;
coada=new int[n];
m=new int[n];
for(i=0;i<n;m[i++]=0);
nr_c=0;
nr_c=insereaza_coada(coada,nr_c,v0);
m[v0]=1;
while(nr_c)
{ nr_c=extrage_coada(coada,nr_c,&i);
printf("\n%i",i+1);
for(int k=0;k<n;k++)
if((a[i][k]==1)&&(m[k]==0))
{ nr_c=insereaza_coada(coada,nr_c,k);
m[k]=1;
}
}
delete coada;
delete m;
}

Implementare BF
void main()
{ int n,v0,**a,m,i,j,vf1,vf2;
printf("Numarul de virfuri:");
scanf("%i",&n);
a=aloca(n,n);
for(i=0;i<n;i++)
for(int j=0;j<=i;j++)
a[j][i]=a[i][j]=0;
printf("\nNumarul de muchii:");
scanf("%i",&m);
for(i=0;i<m;i++)
{ printf("Virf initial:");scanf("%i",&vf1);
printf("Virf final:");scanf("%i",&vf2);
a[vf1-1][vf2-1]=a[vf2-1][vf1-1]=1;
}
printf("\nVirful initial pentru parcurgerea BF ");
scanf("%i",&v0);
printf("\nOrdinea de vizitare a virfurilor grafului este:");
breadth_first(v0-1,a,n);
a=dezaloca(a,n);
}

BFG
BFG(a,n)
{ c[i]=0, i=0,1,,n-1;
gata=0;
v0=1;
ct timp(gata!=0)
{ BF(v0-1,a,n,c);
determin, dac exist, primul vrf v nevizitat (c[v-1]=0)
dac (exist v)
v0=v;
altfel
gata=1;
}
}

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