Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct krawedz
- {
- int wierz1, wierz2, waga;
- };
- struct krawedz *krawedz_tab;
- int *wierz_tab; //tablica wierzchołków
- void prim(int wierz, int kraw)
- {
- struct krawedz *kraw_tab;
- kraw_tab = krawedz_tab;
- int w,k,min_k;
- int moc=0;
- printf("\n%d",krawedz_tab[1].waga);
- wierz_tab = malloc((wierz+1)*sizeof(int));
- for (int i=0;i<=wierz;i++)
- {
- wierz_tab[i]=0;
- }
- for (w=1;w<=wierz-1;w++)
- {
- wierz_tab[1]=1;
- int waga_min=1000;
- for (k=1;k<=kraw;k++)
- {
- //if(kraw_tab[k].waga!=0)printf("\n Kraw : %d %d",k, kraw_tab[k].waga);
- if (kraw_tab[k].waga<waga_min && kraw_tab[k].waga!=0 )
- {
- //printf("\n Wierz 1 | 2 to %d | %d",kraw_tab[k].wierz1, kraw_tab[k].wierz2);
- if(wierz_tab[kraw_tab[k].wierz1]==1 || wierz_tab[kraw_tab[k].wierz2]==1)
- {
- if(wierz_tab[kraw_tab[k].wierz1]==0 || wierz_tab[kraw_tab[k].wierz2]==0)
- {
- printf("\nZamieniam krawedz minimalna z %d na %d",min_k,k);
- waga_min=kraw_tab[k].waga;
- min_k=k;
- }
- }
- }
- }
- kraw_tab[min_k].waga=0;
- wierz_tab[kraw_tab[min_k].wierz1]=1;
- wierz_tab[kraw_tab[min_k].wierz2]=1;
- moc+=waga_min;
- printf("\n\n%d moc krawedzi : %d moc aktualna : %d \nuzyte wierzcholki : %d i %d\nuzyta krawedz : %d\n",w,waga_min,moc,kraw_tab[min_k].wierz1,kraw_tab[min_k].wierz2,min_k);
- }
- printf("\nMoc : %d %d",moc, wierz_tab[kraw_tab[min_k].wierz1]);
- }
- int main (int argc, char *argv[])
- {
- FILE *plik = fopen(argv[1], "r");
- char znak;
- int wierzcholki,krawedzie;
- if(plik==NULL)
- printf("plik jest pusty, lub nie istnieje");
- fscanf(plik,"%d%d",&wierzcholki,&krawedzie);
- printf("%d : %d",wierzcholki,krawedzie);
- krawedz_tab = malloc((krawedzie + 1)*sizeof(struct krawedz));
- //Wypełnianie tablicy struktur
- for (int i = 1; i <= krawedzie; i++)
- {
- fscanf(plik, "%d %d %d ", &krawedz_tab[i].wierz1, &krawedz_tab[i].wierz2, &krawedz_tab[i].waga);
- printf ("\nKrawedz %d : %d %d %d",i,krawedz_tab[i].wierz1,krawedz_tab[i].wierz2,krawedz_tab[i].waga);
- }
- fclose(plik);
- prim(wierzcholki,krawedzie);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement