Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    65

    [c]inserire un nodo insolato ad un grafo con matrice di adiacenza

    Ciao a tutti ho il seguente problema: voglio inserire un nodo isolato in un grafo rappresentato con matrice di adiacenza dinamica. Cioè la matrice dinamica[NxN] è rappresentata tramite un vettore dinamico[NxN].
    codice:
    void INSERISCI_NODO(int n, int **vt)/*inserisce nodo isolato n esimo*/
    {
     int i,j;
     int nuovi=(n+1)*(n+1);
     *vt=(int*)realloc(*vt,nuovi*sizeof(int));
     for (i=0; i<(n*(n+1)); i++)
       { 
        
        if ((i!=0)&&(i%n==0))
          {
           for (j=(((n+1)*(n+1))-1); j>i; j--)
               {
                (*vt)[j]=(*vt)[j-1];
               } 
           (*vt)[i]=0;
          } 
        }
     /*gli ultimi n elementi saranno 0 */
     for (j=i; j<((n+1)*(n+1)); j++)
        (*vt)[j]=0; 
     printf("vettore NUOVO NODO ISOLATO e' : \n");         
     for (i=0; i<((n+1)*(n+1)); i++)
       { 
         if((i!=0)&&(i%(n+1)==0))
            printf("  ");
         printf("%d ",(*vt)[i]);
       }  
     printf("\n");           
    
    }
    int main()
    {
     int nodi,i;
      int *vet=NULL;
      printf("dammi il numero di nodi : \n");
      scanf("%d",&nodi);
      RIEMPI(nodi,&vet);
      printf("vettore INIZIALE e' : \n");
      for(i=0; i<(nodi*nodi); i++)
        {
         if((i!=0)&&(i%nodi==0))
           printf("  ");
         printf("%d ",vet[i]);
        } 
      printf("\n");
    il vettore vet (dichiarato come puntatore ad interi) è riempito nella void riempi. Poi richiamo la void INSERISCI_NODO dove gli passerò il vettore [NxN] elementi che aggiungendo un nodo diventerà (riallocandolo)di (N+1)*(N+1) elementi.
    Esempio se vet di 3 nodi è:
    011 101 110
    aggiungendo un elemento dovrebbe essere:
    0110 1010 1100 0000
    Invece il mio output è sbagliato.
    Spero di essere stato chiaro e che qualcuno mi aiuti grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    65
    alla fine ho trovato una soluzione semplice ma efficace. Uso un contatore che ogni n+1 elementi si ferma shifta verso destra gli elementi e a vet[n+1*i]assegna 0
    codice:
    void INSERISCI_NODO(int n, int **vt)/*inserisce nodo isolato n esimo*/
    {
     int i,j;
     int cont=0;
     *vt=(int*)realloc(*vt,(n+1)*(n+1)*sizeof(int));
     for (i=0; i<(n*(n+1)); i++)/*gli ultimi n+1 elementi sono 0 */
       { 
        cont++;
        if (cont==(n+1))
          {
           for (j=((n*(n+1))-1); j>i; j--)
               {
                (*vt)[j]=(*vt)[j-1];
               } 
            (*vt)[i]=0;
            cont=0;
          } 
        }
     /*gli ultimi n elementi saranno 0 */
     for (j=i; j<((n+1)*(n+1)); j++)/*azzeriamo gli ultimi n+1 elementi*/
        (*vt)[j]=0; 
     printf("vettore NUOVO NODO ISOLATO e' : \n");         
     for (i=0; i<((n+1)*(n+1)); i++)
       { 
         if((i!=0)&&(i%(n+1)==0))
            printf("  ");
         printf("%d ",(*vt)[i]);
       }  
     printf("\n");           
    
    }
    Che ve ne sembra?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.