COSTRUZIONE SOTTOGRAFO IN C

di il
2 risposte

COSTRUZIONE SOTTOGRAFO IN C

Salve, avrei bisogno di aiuto con questa traccia (esercizio 1) sull'implementazione di grafi mediante matrici di adiacenza, ho gia provato ad abbozzare qualcosa ma senza risultati, ho problemi a creare il sottografo.
mio codice: https://pastebin.com/C0LTW6D
foto traccia:

2 Risposte

  • Re: COSTRUZIONE SOTTOGRAFO IN C

    Comincia con definire il grafo in modo piu' consono: se e' una matrice di adiacenza, NON PUO' essere SEMPLICEMENTE un vettore di interi.

    mumble, mumble: matrice -- vettore
    pensa che ti pensa: vettore -- matrice

    non sono mica la stessa cosa!
  • Re: COSTRUZIONE SOTTOGRAFO IN C

    Infatti non ho fatto mica un vettore di interi, ho definito un nuovo tipo "graph" e poi ho allocato dinamicamente la matrice "a" di size n*n
    il vettore di char l'ho semplicemente fatto per rappresentare le lettere dei nodi
    #include <stdio.h>
    #include <stdlib.h>
    #define n 5
    #define m 3
    #include <string.h>
    typedef int  Graph;
    Graph sotto(Graph a[][n],char nodi[],char sottonodi[]) ///ho provato a semplificare le cose copiando
    {                                                      /// il primo grafo dinamico in uno statico per gestire meglio gli indici
      int i,j;
    Graph *b;
    b=(Graph*)calloc(m*m,sizeof(Graph));
    for(i=0;i<m;i++)
    {if(sottonodi[i]==nodi[i])
        for(j=0;j<m;j++)
        {
    
            *(b+i*m+j)= a[i][j];
        }
    }
    return b;
    
    }
    
    
    int main()
    {
    
       Graph *a;
       char nodi[n];
    
       a=(Graph*)calloc(n*n,sizeof(Graph));
    short i,j,x;
    for(i=0;i<n;i++)
    {
        printf("inserisci carattere %d nodo\n",i+1);
    fflush(stdin);
    scanf("%c",&nodi[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {if(j!=i){
            printf("se %c e' connesso a %c digita 1 altrimenti 0\n",nodi[i],nodi[j]);
                fflush(stdin);
            scanf("%d",&x);
            if(x==1)
            *(a+j*n+i)=1;
                else
                *(a+j*n+i)=0;}
        }
    }
    puts("visualizzazione matrice");
    
    for(i=0;i<n;i++)
    {
        printf("%c: ",nodi[i]);
        for(j=0;j<n;j++)
        {
            printf("[%d] ",*(a+j*n+i));
        }puts("");
    }
    Graph c[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            c[i][j]=*(a+j*n+i);
        }
    }
    puts("visualizzo a statica:");
    for(i=0;i<n;i++)
    {printf("%c: ",nodi[i]);
        for(j=0;j<n;j++)
        {
            printf("[%d] ",c[i][j]);
        }puts("");
    }
    char sotton[m];
    for(i=0;i<m;i++)
    {
        printf("inserisci %d nodo per costruire il sottografo\n",i+1);
        fflush(stdin);
        scanf("%c",&sotton[i]);
    }
    
    
    puts("visualizzo sottografo B");
    Graph *b=sotto(c,nodi,sotton);
    for(i=0;i<m;i++)
    {
        printf("%c: ",sotton[i]);
        for(j=0;j<m;j++)
        {
            printf("[%d] ",*(b+j*m+i));
        }puts("");
    }
    
    
    
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte