PDA

View Full Version : [c]inserire un nodo insolato ad un grafo con matrice di adiacenza


mame83
15-06-2011, 18:54
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].

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.

mame83
16-06-2011, 16:11
ragazzi vi prego aiutatemi non so piu cosa fare.:mc:

mame83
17-06-2011, 08:57
alla fine ho trovato una soluzione semplice ma efficace. Allora metto un contatore che ogni n+1 elementi si ferma shifta verso destra gli elementi e pone vet[n+1*i]=0.

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 ne pensate???