Advertisement
Guest User

Untitled

a guest
Mar 26th, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct krawedz
  5. {
  6.         int wierz1, wierz2, waga;
  7. };
  8. struct krawedz *krawedz_tab;
  9. int *wierz_tab; //tablica wierzchołków
  10.  
  11. void prim(int wierz, int kraw)
  12. {
  13. struct krawedz *kraw_tab;
  14. kraw_tab = krawedz_tab;
  15. int w,k,min_k;
  16. int moc=0;
  17. printf("\n%d",krawedz_tab[1].waga);
  18. wierz_tab = malloc((wierz+1)*sizeof(int));
  19. for (int i=0;i<=wierz;i++)
  20. {
  21.     wierz_tab[i]=0;
  22. }
  23. for (w=1;w<=wierz-1;w++)
  24. {
  25.     wierz_tab[1]=1;
  26.     int waga_min=1000;
  27.     for (k=1;k<=kraw;k++)
  28.     {
  29.        
  30.         //if(kraw_tab[k].waga!=0)printf("\n Kraw : %d %d",k, kraw_tab[k].waga);
  31.         if (kraw_tab[k].waga<waga_min && kraw_tab[k].waga!=0 )
  32.         {        
  33.             //printf("\n Wierz 1 |  2 to %d | %d",kraw_tab[k].wierz1, kraw_tab[k].wierz2);
  34.             if(wierz_tab[kraw_tab[k].wierz1]==1 || wierz_tab[kraw_tab[k].wierz2]==1)
  35.             {
  36.             if(wierz_tab[kraw_tab[k].wierz1]==0 || wierz_tab[kraw_tab[k].wierz2]==0)
  37.             {
  38.                 printf("\nZamieniam krawedz minimalna z %d na %d",min_k,k);
  39.             waga_min=kraw_tab[k].waga;
  40.             min_k=k;
  41.             }
  42.         }
  43.         }
  44.     }
  45.    
  46.     kraw_tab[min_k].waga=0;
  47.     wierz_tab[kraw_tab[min_k].wierz1]=1;
  48.     wierz_tab[kraw_tab[min_k].wierz2]=1;
  49.     moc+=waga_min;
  50.     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);
  51. }
  52. printf("\nMoc : %d %d",moc, wierz_tab[kraw_tab[min_k].wierz1]);
  53. }
  54.  
  55. int main (int argc, char *argv[])
  56. {
  57. FILE *plik = fopen(argv[1], "r");
  58. char znak;
  59. int wierzcholki,krawedzie;
  60. if(plik==NULL)
  61. printf("plik jest pusty, lub nie istnieje");
  62.  
  63. fscanf(plik,"%d%d",&wierzcholki,&krawedzie);
  64. printf("%d   :   %d",wierzcholki,krawedzie);
  65. krawedz_tab = malloc((krawedzie + 1)*sizeof(struct krawedz));
  66.     //Wypełnianie tablicy struktur
  67.         for (int i = 1; i <= krawedzie; i++)
  68.         {
  69.                 fscanf(plik, "%d %d %d ", &krawedz_tab[i].wierz1, &krawedz_tab[i].wierz2, &krawedz_tab[i].waga);
  70.                 printf ("\nKrawedz %d : %d  %d  %d",i,krawedz_tab[i].wierz1,krawedz_tab[i].wierz2,krawedz_tab[i].waga);
  71.         }
  72.  
  73.     fclose(plik);
  74.     prim(wierzcholki,krawedzie);
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement