Advertisement
nicb

Grafo con LISTE Etichettato

Feb 10th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. typedef struct dati
  7. {
  8.     char nome [20];
  9.     int peso;
  10. }dati;
  11. //typedef dati *pdati;
  12.  
  13. typedef struct vertice
  14. {
  15.     dati persona;
  16.     struct vertice *next;
  17. }vertice;
  18. typedef vertice *pvertice;
  19.  
  20. void crea_vertice(pvertice grafo[], int size)
  21. {
  22.     pvertice appoggio;
  23.     int i;
  24.     for(i=0;i<size;i++)
  25.     {
  26.         appoggio=calloc(1,sizeof(vertice));
  27.         printf("\nInserisci il nome: ");
  28.         fflush(stdin);
  29.         fgets(appoggio->persona.nome,20,stdin);
  30.         printf("\nInserisci il peso di questo veritce: ");
  31.         scanf("%d",&appoggio->persona.peso);
  32.         grafo[i]=appoggio;
  33.     }
  34. }
  35. void stampa_vertice (pvertice grafo[],int size)
  36. {
  37.     int i;
  38.     for(i=0;i<size;i++)
  39.     {
  40.         printf("\n__________\n");
  41.         printf("\nNOME: %s",grafo[i]->persona.nome);
  42.         printf("\n");
  43.         printf("Eta': %d",grafo[i]->persona.peso);
  44.     }
  45.  
  46. }
  47. void crea_arco (pvertice grafo[], pvertice grafo_i,int size,int i)
  48. {
  49.     pvertice appoggio;
  50.     int scelta, j,cont=0;
  51.     char vertice[20];
  52.     printf("\nVuoi un vertice adiacente a al %d vertice=> digita[1]-----Per uscire da inserimento[0]",i+1);
  53.     scanf("%d",&scelta);
  54.     while(scelta!=0&&cont<=size)
  55.     {
  56.         printf("\ninserisci il nome da collegare al %d vertice",i+1);
  57.         fflush(stdin);
  58.         fgets(vertice, 20, stdin);
  59.         for (j=0;j<size;j++)
  60.         {
  61.             if(strcmp(vertice,grafo[j]->persona.nome)==0)
  62.             {
  63.                 appoggio=calloc(1,sizeof(struct vertice));
  64.                 appoggio->persona=grafo[j]->persona;
  65.                 appoggio->next=NULL;
  66.                 grafo_i->next=appoggio;
  67.                 grafo_i=appoggio;
  68.                 j=size;
  69.                 cont ++;
  70.             }
  71.         }
  72.         printf("\nContinuare ad inseire [1]-----Uscire da inserimento[0]");
  73.         scanf("%d",&scelta);
  74.     }
  75. }
  76. void stampa_tot(pvertice grafo_i)
  77. {
  78.     while(grafo_i!=NULL)
  79.     {
  80.         printf("\t%s=>",grafo_i->persona.nome);
  81.         grafo_i=grafo_i->next;
  82.     }
  83.     printf("NULL");
  84. }
  85.  
  86. int main()
  87. {
  88.     pvertice *grafo;
  89.     int size,i;
  90.     printf("quanto sara' grande il grafo?");
  91.     scanf("%d",&size);
  92.     grafo=calloc(size, sizeof(vertice));
  93.     crea_vertice(grafo, size);
  94.     stampa_vertice(grafo, size);
  95.     for(i=0;i<size;i++)
  96.     {
  97.         crea_arco(grafo,grafo[i],size,i);
  98.     }
  99.     for(i=0;i<size;i++)
  100.     {
  101.         printf("\n");
  102.         stampa_tot(grafo[i]);
  103.     }
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement