creat una multdimentional matriz para almacenar muchas matrices de diferentes tamaños en C
Le hice esta pregunta, pero he eliminado porque no estaba claro. Tengo tres bucles que producen 0, 1 los datos. Me gustaría guardarlas como una matriz por eso creo que debería ser almacenados en una matriz multidimensional que yo llamo Third
.
for (i=0; i<m; i++) {
for (int l = 0; l < n2; ++l) {
for (x = 0; x < all[i].n; ++x) {
f = (int)VECTOR(v2)[l];
if(a[x].vto == f) {
printf("%d",1);
} else {
printf("%d",0);
}
}
}
for (int y = 0; y < n1; ++y) {
for (x = 0; x < all[i].n; ++x) {
q = (int)VECTOR(v1)[y];
if(a[x].vfrom == q) {
printf("%d",1);
} else {
printf("%d",0);
}
}
}
printf("\n");
}
El resultado impreso desde el código anterior es y me gustaría guardarlo en esta forma:
100010001111
111000000111100100010010001001
111000000000111000000000111100100100010010010001001001
110000001100000011101010010101
111100010001
Mi objetivo es almacenar el resultado impreso en una matriz como
Third = = [ [[100][010][001][111]] [[111000][000111][100100][010010][001001]]...[[111][100][010][001]]
así que si quiero acceder a la matriz Third
yo Third[3] = [ [110000] [001100] [000011] [101010] [010101] ]
o Third[3][1] = [001100]
o Third[3][1][2] = 1
.
Yo sería muy feliz para aclarar cualquier cosa que no sea claro. Gracias por la ayuda
EDIT 1: El código es demasiado grande para ser añadido por completo. Me preguntó acerca de la forma en general para lograr lo que yo estoy buscando, que es cómo construir una matriz multidimensional o un array de arrays para almacenar los datos de los resultados de cualquiera de las tres bucles anidados (no es necesario, mi bucles).
Me fijo el presente código, así que ahora la matriz Third
contiene todos los datos, pero no creo que sea la manera correcta de almacenar los datos para poder acceder a él más tarde como Third[3] = [ [110000] [001100] [000011] [101010] [010101] ]
Aquí es lo que yo hice:
int second[n1+n2][n1*n2];
int first[n1*n2];
int Third[m][n1+n2][n1*n2];
for (i=0; i<m; i++) {
Data * a = all[i].datas;
igraph_edge(&graph, i, &from, &to);
igraph_neighbors(&graph, &v1, from, IGRAPH_ALL);
igraph_neighbors(&graph, &v2, to, IGRAPH_ALL);
int n2 = igraph_vector_size(&v2);
int n1 = igraph_vector_size(&v1);
int f, q, x, l, y;
for (l = 0; l < n2; ++l) {
for (x = 0; x < all[i].n; ++x) {
f = (int)VECTOR(v2)[l];
if(a[x].vto == f) {
first[x]=1;
} else {
first[x]=0;
}
second[l][x] = first[x];
Third[i][l][x] = second[l][x];
printf("%d", Third[i][l][x]);
}
}
for (y = 0; y < n1; ++y) {
for (x = 0; x < all[i].n; ++x) {
q = (int)VECTOR(v1)[y];
if(a[x].vfrom == q) {
first[x]=1;
} else {
first[x]=0;
}
second[y+n2][x] = first[x];
Third[i][y+n2][x] = second[y+n2][x];
printf("%d", Third[i][y+n2][x]);
}
}
printf("\n");
}
al compilar el código anterior puedo conseguir
100010001111
111000000111100100010010001001
111000000000111000000000111100100100010010010001001001
110000001100000011101010010101
111100010001
No estoy seguro de si esta es la manera correcta de hacerlo?gracias
EDIT 2:
Me pregunto si la declaración de este modo como a continuación es correcto o no? Es el modelo de tres dimensiones de la matriz Third
de tamaño fijo o es (según sea necesario) dinámicos de acuerdo a n1
y n2
que cambia dependiendo de la iteración de i.
int second[n1+n2][n1*n2];
int first[n1*n2];
int Third[m][n1+n2][n1*n2];
for (i=0; i<m; i++) {
Data * a = all[i].datas;
igraph_edge(&graph, i, &from, &to);
igraph_neighbors(&graph, &v1, from, IGRAPH_ALL); //initialize the vector v2 where it's values and it's size vary depending on i
igraph_neighbors(&graph, &v2, to, IGRAPH_ALL); //initialize the vector v2 where it's values and it's size vary depending on i
int n2 = igraph_vector_size(&v2); // the size changes depending on i, i.e the change from an iteration to another
int n1 = igraph_vector_size(&v1); // the size changes depending on i, i.e the change from an iteration to another
int f, q, x, l, y;
for (l = 0; l < n2; ++l) {
for (x = 0; x < all[i].n; ++x) {
f = (int)VECTOR(v2)[l];
if(a[x].vto == f) {
first[x]=1;
} else {
first[x]=0;
}
second[l][x] = first[x];
Third[i][l][x] = second[l][x];
}
}
}