Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] creare un grafo

  1. #1

    [C] creare un grafo

    Salve a tutti,
    è la prima volta che scrivo sul forum anche se vi leggo da sempre.
    Sto facendo un programma per un esame, ma non riesco a risolvere questo problema ..
    il programma deve creare un grafo... ho scritto questa funzione ricorsiva che dovrebbe creare una lista collegata ma non funzia... mi da sempre

    Segmentation fault (core dumped)

    ma non capisco perchè!!!
    Vi metto anche la chiamante.. potete aiutarmi?

    codice:
    CHIAMANTE:
    inizio_grafo_p = crea_grafo(numero_vertici_grafo);
    codice:
    CREA GRAFO:
    
    vertice_grafo_t *crea_grafo (int numero_vertici_grafo)
    {
      vertice_grafo_t 	*vertice_p = NULL,
    			*primo_vertice_p = NULL;
    
      if(numero_vertici_grafo == 1)
      {
        vertice_p = malloc(sizeof(vertice_grafo_t));	/* Crea vertice */
        vertice_p->valore = numero_vertici_grafo;		/* Imposta valore vertice corrente */
        vertice_p->colore = bianco; 			/* Imposta colore vertice corrente */
        crea_archi();					/* Crea adiacenze*/
        vertice_p->vertice_succ_p = NULL;
        primo_vertice_p =  vertice_p;
      }
      else
      {
        vertice_p = malloc(sizeof(vertice_grafo_t));	/* Crea vertice */
        vertice_p->valore = numero_vertici_grafo;		/* Imposta valore vertice corrente */
        vertice_p->colore = bianco; 			/* Imposta colore vertice corrente */
        crea_archi();					/* Crea adiacenze*/
        vertice_p->vertice_succ_p = crea_grafo(numero_vertici_grafo-1);
      }
    
      return(primo_vertice_p);
    }
    Potete aiutarmi?

    Grazie!!!

  2. #2
    La funzione ritorna NULL quando non gli passi 1; perchè ritorni primo_vertice_p, che non è allocato, invece di vertice_p.
    In pratica in tutti i casi tranne quando non è 1 tu ritorni un puntatore nullo.


  3. #3
    Sembra che funzioni!
    Grazie menphisx !
    E' che mi intreccio un po' con i puntatori
    La funzione dovrebbe prendere in pasto il numero di vertici del grafo collegarli in successione:

    tipo: 1->2->3->...->NULL

    restituire un puntatore al primo vertice..

    l'ho corretta così:

    codice:
    /* 
       * Crea grafo
       */
      inizio_grafo_p = crea_grafo(numero_vertici_grafo, 1);
    codice:
    /* 
     * definizione funzione CREA VERTICI 
     */
    vertice_grafo_t *crea_grafo (int numero_vertici_grafo,
    			     int valore_primo_vertice)
    {
      vertice_grafo_t 	*vertice_p = NULL;
    
      if(numero_vertici_grafo == 1)
      {
        vertice_p = (vertice_grafo_t *) malloc (sizeof(vertice_grafo_t));	/* Crea vertice */
        vertice_p->valore = valore_primo_vertice;				/* Imposta valore vertice corrente */
        vertice_p->colore = bianco; 					/* Imposta colore vertice corrente */
        crea_archi();							/* Crea adiacenze*/
        vertice_p->vertice_succ_p = NULL;
    
      }
      else
      {
        vertice_p = (vertice_grafo_t *) (sizeof(vertice_grafo_t));	/* Crea vertice */
        vertice_p->valore = valore_primo_vertice;		/* Imposta valore vertice corrente */
        vertice_p->colore = bianco; 			/* Imposta colore vertice corrente */
        crea_archi();					/* Crea adiacenze*/
        vertice_p->vertice_succ_p = crea_grafo(numero_vertici_grafo-1, valore_primo_vertice + 1);
    
      }
    
      return(vertice_p);
    }
    Giusto? o no?


  4. #4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.