Documente Academic
Documente Profesional
Documente Cultură
CUPRINS
Descrierea algoritmului
Mecanismul algoritmului
Exemplu
Cod C++
DESCRIEREA ALGORITMULUI
Cuprins
MECANISMUL ALGORITMULUI
date de intrare: un graf neorientat conex
date de iesire:un arbore de cost minim
pentru a forma arborele trebuie alese n-1 muchii(n fiind numarul de
noduri al grafului)
creează o mulţime de arbori, unde fiecare vârf din graf este un arbore
separat
creează o mulţime U’ care conţine toate muchiile din graf
atât timp cât U’ este nevidă si nu s-au ales cele n-1 muchii:
elimină o muchie de cost minim din U’ cu extremitatile nemarcate
sau marcate diferit
dacă acea muchie unifica doi arbori distincţi, atunci adaugă muchia,
unificand cei doi arbori într-unul singur
la sfarsit, vom avea o singura componenta conexa, care este arborele
partial de cost minim al grafului.
Cuprins
EXEMPLU
Cuprins
Algoritmul lui Kruskal aplicat pentru graful anterior:
Initial: viz:
Costul=0
Cuprins
Se alege muchia [2,4]
viz:
Costul=0+1→costul=1;
Cuprins
Se alege muchia [7,8]
viz:
Costul=2+1→costul=3
Cuprins
Arborele rezultat este:
Cuprins
COD C++
void kruskal()
{int i,j,k;
i=1;
for(k=1;k<=n-1;k++)
{while(viz[v[i].x]==viz[v[i].y]&&viz[v[i].x]!=0)
i++;
c+=v[i].cost;
cout<<v[i].x<<" "<<v[i].y<<endl;
if(viz[v[i].x]+viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=v[i].x;
else
if(viz[v[i].x]*viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=viz[v[i].x]+viz[v[i].y];
else
{for(j=1;j<=n;j++)
if(viz[j]==viz[v[i].x]&&j!=v[i].x)
viz[j]=viz[v[i].y];
viz[v[i].x]=viz[v[i].y];
}
i++;
}
Cuprins
cout<<c;
}