130 likes | 463 Views
Algoritmul lui Bellman-Ford. Cuprins :. Mecanismul algoritmului Exemplu Implementare C++. Mecanismul algoritmului. Algoritmul este numit după dezvoltatorii săi Richard Bellman şi Lester Ford .
E N D
Cuprins: • Mecanismul algoritmului • Exemplu • Implementare C++
Mecanismul algoritmului Algoritmul este numit după dezvoltatorii săi Richard Bellman şi Lester Ford. • Algoritmul lui Bellman-Ford este bazat pe algoritmul BF,adăugând într-o coadă adiacenții unui nod nemarcați sau accesibili pe noduri de lungime mai mică decât suma dintre costul muchiei dintre adiacentul luat și valoarea deja existentă în nodul curent. • Algoritmului i se poate asocia un vector “p” pentru păstrarea precedenței.
Exemplu: 3 2 3 1 1 1 1 4 4 5 1
Algoritmullui Bellman-Ford aplicatpentrugraful anterior: Iniţial: • viz: 0 ∞ ∞ ∞ ∞ ∞ • c: 1
Se alegemuchia[1,2] viz: 0 1 ∞ ∞ ∞ c:1,2 • 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 • Se alege muchia[2,5] viz: 0 1 4 4 2 c:1,2,4,3,5 • 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 • 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 • Se alege muchia[5,3] viz: 0 1 3 4 2 c:1,2,4,3,5,3 • 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 • 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 În final: viz: 0 1 3 3 2 c:1,2,4,3,5,3,4
Implementare C++ void Bellman_Ford() { intprim,ultim; for (i=1;i<=n;i++) { viz[i] = oo; } viz[x] = 0; ultim=1; prim=1; coada[1]=x; while(prim<=ultim) { x=coada[prim++]; for(i=1;i<=n;i++) { ++nr; if(viz[i]>viz[x]+a[x][i] && a[x][i]!=oo) { coada[++ultim]=i; viz[i]=viz[x]+a[x][i]; } } } cout<<"vector BF : "; for(i=1;i<=n;i++) cout<<coada[i]<<" "; }