Sunteți pe pagina 1din 10

ALGORITMUL LUI BELLMAN-FORD

CUPRINS:

Mecanismul algoritmului Exemplu Implementare C++

MECANISMUL ALGORITMULUI

Algoritmul este numit dup dezvoltatorii si Richard Bellman i Lester Ford.

Algoritmul lui Bellman-Ford este bazat pe algoritmul BF,adugnd ntr-o coad adiacenii unui nod nemarcai sau accesibili pe noduri de lungime mai mic dect suma dintre costul muchiei dintre adiacentul luat i valoarea deja existent n nodul curent.

Algoritmului i se poate asocia un vector p pentru pstrarea precedenei.

EXEMPLU:

2 1

3 3

1 4

4
1 5
4

Algoritmul lui Bellman-Ford aplicat pentru graful anterior: Iniial:

3
3

viz: 0

c: 1

1 4
4 1

5
5

Se alege muchia [1,2] viz: 0 1 c: 1,2

2 1

3
3

Se alege muchia [1,4] viz: 0 1 4 c: 1,2,4

Se alege muchia[2,3]
viz: 0 1 4 4 c: 1,2,4,3

1 4
4 1

Se alege muchia[2,5] viz: 0 1 4 4 2 c: 1,2,4,3,5

5
6

Se alege muchia[4,5] viz: 0 1 4 4 2 c: 1,2,4,3,5,

Se alege muchia[3,2] viz: 0 1 4 4 2 c: 1,2,4,3,5

2 1

3
3

Se alege muchia[3,5] viz: 0 1 4 4 2 c: 1,2,4,3,5

Se alege muchia[5,2]
viz: 0 1 4 4 2 c: 1,2,4,3,5

1 4
4 1

Se alege muchia[5,3] viz: 0 1 3 4 2 c: 1,2,4,3,5,3

5
7

Se alege muchia[5,4] viz: 0 1 3 3 2 c: 1,2,4,3,5,3,4

Se alege muchia[3,2] viz: 0 1 3 3 2 c: 1,2,4,3,5,3,4

2 1

3
3

Se alege muchia[3,5] viz: 0 1 3 3 2 c: 1,2,4,3,5,3,4

Se alege muchia[4,5]
viz: 0 1 3 3 2 c: 1,2,4,3,5,3,4

1 4

n final: viz: 0 1 3 3 2 c: 1,2,4,3,5,3,4

4 1

5
8

IMPLEMENTARE C++ void Bellman_Ford() { if(viz[i]>viz[x]+a[x][i] && a[x][i]!=oo) { coada[++ultim]=i; viz[i]=viz[x]+a[x][i];

int prim,ultim;
for (i=1;i<=n;i++) { viz[i] = oo; } viz[x] = 0; ultim=1; prim=1; coada[1]=x;

}
} } cout<<"vector BF : "; for(i=1;i<=n;i++) cout<<coada[i]<<" "; }

while(prim<=ultim)
{ x=coada[prim++]; for(i=1;i<=n;i++) { ++nr;

Proiect realizat de: Doboel Bianca i Ghiuzan Andreea

Clasa a XI-a B
Colegiul Naional Roman-Vod Profesor coordonator: Gavril Petru Florin

10

2011

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