@CalgaryCorpus: "...Una pista..."
Otra pista :)) Haz el bucle donde asignas los valores de 'ma' a 'v' con palel y lapiz para ver en que posiciones guardas:
Código C:
Ver originalfor (i=0;i<5;i++) {
for (j=0;j<5;j++) {
v[i]=ma[i][j];
}
}
No obstante puede que te resulte mas atractivo algoritmo de los videojuegos (aplicable en muchos casos):
Código C:
Ver originalposicion lineal = (ancho matriz * posicion y) + posicion x
Código C:
Ver original#define W 5
#define H 5
int x, y, offset;
for(y = 0; y < H; y++) {
for(x = 0; x < W; x++) {
offset = (W * y) + x;
v[offset] = ma[y][x];
}
}
Solo una observacion, en este caso estoy leyendo de derecha a izquierda y de arriba a abajo, por eso recojo los valores con las posiciones cambiadas ma[y][x]
Esto te deja el array bidimensional como lineal; de esta forma puedes acceder a cualquier posicion del array lineal para lectura i/o escritura sabiendo las coordenadas que ocuparia en la matriz:
Código C:
Ver original(3x3)
0 1 2
3 4 5
6 7 8
P.ej. la posicion 5 = columna 2, fila 1 -> offset = (3 * 1) + 2
Espero que te sea de ayuda
Saludos
vosk