Kruskalov algoritam je još jedan od algoritama koji određuju stablo minimalne dužine.
Algoritam:
Primer: Formirati minimalno razapinjuće stablo koristeći Kruskalov algoritam.
Rešenje: Popisaćemo sve grane iz grafa, sortirati u nepodajući niz .
grane | težina | soritrane grane | tezina |
---|---|---|---|
(a.b) | 8 | (eh) | 1 |
(a,c) | 11 | (c,e) | 2 |
(b,c) | 3 | (f,h) | 2 |
(b,d) | 3 | (b,c) | 3 |
(c,e) | 2 | (b,d) | 3 |
(c,f) | 6 | (h,i) | 3 |
(d,g) | 5 | (d,e) | 4 |
(e,h) | 1 | (d,g) | 5 |
(f,h) | 2 | (c,f) | 6 |
(h,i) | 3 | (g,h) | 6 |
(g,i) | 7 | (g,i) | 7 |
(g,h) | 6 | (a.b) | 8 |
(d,e) | 4 | (a,c) | 11 |
Iz soritranog niza nećemo koristiti grane koje će stvoriti konture, a to su grane: (a,c), (d,e), (g,h), (g,i), (c,f).
#include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct pgrana { int pocetak; int kraj; double tezina; } grana; void Ulaz(); void Sort(); int dimenzija,brojGrana; int boje[MAX]; grana graf[MAX],stablo[MAX]; int main(int argc,char* argv[]) { int i,j,uvrscene=0; Ulaz(); Sort(); for(i=0;i<dimenzija;i++) boje[i]=i; for(i=0;i<brojGrana;i++) if(boje[graf[i].pocetak] != boje[graf[i].kraj]) { int stara=boje[graf[i].pocetak]; for(j=0;j<dimenzija;j++) if(boje[j]==stara) boje[j]=boje[graf[i].kraj]; for(j=0;j<dimenzija;j++) printf(" %d",boje[j]); printf("\n"); stablo[uvrscene].pocetak=graf[i].pocetak; stablo[uvrscene].kraj=graf[i].kraj; stablo[uvrscene].tezina=graf[i].tezina; uvrscene++; } for(i=0;i<uvrscene;i++) printf("\n(%d %d %lf)",stablo[i].pocetak,stablo[i].kraj,stablo[i].tezina); return 0; } void Ulaz() { int i,j,t; double tezina; scanf("%d %d",&dimenzija,&brojGrana); for(t=0;t<brojGrana;t++) scanf("%d%d%lf",&graf[t].pocetak,&graf[t].kraj,&graf[t].tezina); return; } void Sort() { int i,j,ip; double dp; for(i=0;i<brojGrana-1;i++) for(j=i+1;j<brojGrana;j++) if(graf[i].tezina > graf[j].tezina) { ip = graf[i].pocetak; graf[i].pocetak=graf[j].pocetak; graf[j].pocetak=ip; ip = graf[i].kraj; graf[i].kraj=graf[j].kraj; graf[j].kraj=ip; dp = graf[i].tezina; graf[i].tezina=graf[j].tezina; graf[j].tezina=dp; } return; }