NicolaDelPrete

Grafo con liste

Feb 12th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct info
  5. {
  6.     char nome[30];
  7.     int peso;
  8. }info;
  9. typedef struct grafo
  10. {
  11.     info nodo;
  12.     struct grafo *next;
  13. }grafo;
  14. typedef grafo *pgrafo;
  15. typedef struct appoggio
  16. {
  17.     int indice;
  18.     int pesi;
  19. }appoggio;
  20. void ini_grafo(pgrafo k[],int size)
  21. {
  22.     pgrafo app;
  23.     int i;
  24.     for(i=0;i<size;i++)
  25.     {
  26.         system("cls");
  27.         app=calloc(1,sizeof(struct grafo));
  28.         printf("Inserire il [%d] elemento: ",i+1);
  29.         fflush(stdin);
  30.         gets(app->nodo.nome);
  31.         printf("Inserire il [%d] peso dell'elemento: ",i+1);
  32.         scanf("%d",&app->nodo.peso);
  33.         k[i]=app;
  34.     }
  35. }
  36. void carica_lista(pgrafo k[],pgrafo t,int size , int j)
  37. {
  38.     int i,cont=0;
  39.     char scelta,nom[30];
  40.     pgrafo app;
  41.     do
  42.     {
  43.       system("cls");
  44.       printf("Si vuole inserire un nodo collegato a %s[s=SI|n=NO]: ",k[j]->nodo.nome);
  45.       fflush(stdin);
  46.       scanf("%c",&scelta);
  47.       if(scelta=='s')
  48.       {
  49.           system("cls");
  50.           printf("Inserire il nome da collegare : ");
  51.           fflush(stdin);
  52.           gets(nom);
  53.           for(i=0;i<size;i++)
  54.           {
  55.               if(strcmp(nom,k[i]->nodo.nome)==0)
  56.               {
  57.                   app=calloc(1,sizeof(struct grafo));
  58.                   app->nodo=k[i]->nodo;
  59.                   t->next=app;
  60.                   t=app;
  61.                   cont+=1;
  62.               }
  63.           }
  64.  
  65.  
  66.       }else if(scelta=='n')
  67.         {
  68.            system("cls");
  69.             printf("Arrivederci\n");
  70.             system("pause");
  71.         }else
  72.         {
  73.            system("cls");
  74.             printf("SCELTA NON VALIDA!\n");
  75.             system("pause");
  76.         }
  77.     }while(scelta!='n'&& cont<size);
  78.  
  79. }
  80. void stampa(pgrafo p)
  81. {
  82.     while(p!=NULL)
  83.     {
  84.         printf("%s -> ",p->nodo.nome);
  85.         p=p->next;
  86.     }
  87.     printf("NULL\n");
  88. }
  89. void carica_peso (appoggio *cosa, pgrafo k, int j)
  90. {
  91.     (*cosa).pesi=0;
  92.     (*cosa).indice=j;
  93.     while(k!=NULL)
  94.     {
  95.         (*cosa).pesi+=k->nodo.peso;
  96.         k=k->next;
  97.     }
  98. }
  99. void ordina (appoggio cosa[],int size)
  100. {
  101.     int i,j;
  102.     appoggio *l;
  103.     l=calloc(1,sizeof(struct appoggio));
  104.     for(i=0;i<size;i++)
  105.     {
  106.         for(j=i+1;j<size;j++)
  107.         {
  108.             if(cosa[j].pesi<cosa[i].pesi)
  109.             {
  110.                 *l=cosa[i];
  111.                 cosa[i]=cosa[j];
  112.                 cosa[j]=*l;
  113.             }
  114.         }
  115.     }
  116. }
  117. void media (appoggio cosa[],int size)
  118. {
  119.     int media=0,j;
  120.     for(j=0;j<size;j++)
  121.         media+=cosa[j].pesi;
  122.     printf("\n La media \x82 : %d",media/size);
  123.  
  124. }
  125. int main()
  126. {
  127.     pgrafo *k;
  128.     int size,j;
  129.     appoggio *cosa;
  130.     printf("Inserire il numero dei nodi: ");
  131.     scanf("%d",&size);
  132.     k=calloc(size,sizeof(struct grafo));
  133.     ini_grafo(k,size);
  134.     for(j=0;j<size;j++)
  135.         carica_lista(k,k[j],size,j);
  136.     for(j=0;j<size;j++)
  137.         stampa(k[j]);
  138.     cosa=calloc(size,sizeof(struct appoggio));
  139.     for(j=0;j<size;j++)
  140.         carica_peso(&cosa[j],k[j],j);
  141.     ordina(cosa,size);
  142.     printf("Il nodo che pesa meno \x82: \n");
  143.     stampa(k[cosa[0].indice]);
  144.     printf("Il nodo che pesa di piu \x82: \n");
  145.     stampa(k[cosa[size-1].indice]);
  146.     media(cosa,size);
  147.  
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment