View Full Version : [Linguaggio C] Allocazione dinamica di una matrice bidimensionale
Fenomeno85
16-02-2005, 10:24
devi usare calloc
~§~ Sempre E Solo Lei ~§~
esempio scusa ?
supponiamo di partire da questa:
matrice[10][10];
ma durante l'esecuzione del programma mi serve la medesima matrice di 100x100 elementi, cosa scrivo ?
non mi era mai capitata una situazione con gli array :muro:
data una matrice fatta cosμ, esiste un algoritmo che mi determina la lunghezza dei percorsi?
e
s
s = start
e = end
Fenomeno85
16-02-2005, 12:43
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.
per un array θ cosμ quindi ti crei un array
#include <stdio.h>
#include <stdlib.h>
int main (void){
int *pMatrice;
pMatrice = (int*) calloc (10*10, sizeof(int));
for (int i=0;i<100;i++){
pMatrice[i]=i+1;
}
for (i=0;i<100;i++){
printf ("%d\t",pMatrice[i]);
if (i==i*10 && i!=0) printf ("\n");
}
printf ("\n\n\n\n\n2 elemento della 3 riga:%d",pMatrice[3*10+2]);
system ("PAUSE");
return (0);
}
questo θ un metodo
~§~ Sempre E Solo Lei ~§~
grazie Fenomeno85 :)
ho trovato pure questo
int i;
int **p;
p = (int**)malloc(riga*sizeof(int*));
for(i = 0; i <= colonna; i++)
p[i] = (int*) malloc(colonna*sizeof(int));
se riga = 10 e colonna = 10
dovrebbero venire allocati (10*4) + (10*4) = 160 (byte) o sbaglio ?
Fenomeno85
16-02-2005, 16:18
si dovrebbero essere 160 byte perς poi la dimensione dei valori dipende anche dall'architettura se non ricordo male ... cmq possono variare questo son sicuro.
~§~ Sempre E Solo Lei ~§~
Ziosilvio
16-02-2005, 22:53
Originariamente inviato da Fenomeno85
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.
Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra), pronunciato DIX-tra.
Ziosilvio
16-02-2005, 22:55
Originariamente inviato da misterx
int i;
int **p;
p = (int**)malloc(riga*sizeof(int*));
for(i = 0; i <= colonna; i++)
p[i] = (int*) malloc(colonna*sizeof(int));
se riga = 10 e colonna = 10
dovrebbero venire allocati (10*4) + (10*4) = 160 (byte) o sbaglio ?
No, un po' di piω.
Il motivo θ che allochi prima una sequenza di puntatori a int, e poi dieci sequenze di dieci int ciascuna.
Quindi la memoria totale allocata θ riga*sizeof(int*) + riga*colonna*sizeof(int).
A proposito: nel for su i, la seconda condizione deve essere "i < riga".
Fenomeno85
17-02-2005, 09:46
Originariamente inviato da Ziosilvio
Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra), pronunciato DIX-tra.
grazie x l'info sul nome :D
~§~ Sempre E Solo Lei ~§~
Originariamente inviato da Ziosilvio
No, un po' di piω.
Il motivo θ che allochi prima una sequenza di puntatori a int, e poi dieci sequenze di dieci int ciascuna.
Quindi la memoria totale allocata θ riga*sizeof(int*) + riga*colonna*sizeof(int).
A proposito: nel for su i, la seconda condizione deve essere "i < riga".
dei cammini minimi a sorgente singola, sai nulla ?
mpattera
27-02-2005, 20:54
Originariamente inviato da Fenomeno85
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.
dijkstra serve per trovare il cammino minimo tra due nodi di un grafo pesato.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.