-1
元の配列の合計を示す3つの2次元配列を知ることで、任意のサイズの3D配列を再生成するプログラム可能な方法を見つけようとしています各軸上に画像が表示とおり和コードの3D配列を3つの投影和2D配列から再生成
例:
int D = 3 ;
int xsum[D][D] = {0};
int ysum[D][D] = {0};
int zsum[D][D] = {0};
for(int x = 0 ; x<D ;x++){
for(int y = 0 ; y<D ;y++){
for(int d = 0 ;d<D;d++){
zsum[x][y] = zsum[x][y] + array[d][y][x];
}
}
}
for(int x = 0 ; x<D ;x++){
for(int z = 0 ;z<D ;z++){
for(int d = 0 ;d<D;d++){
ysum[x][z] = ysum[x][z]+array[z][d][x];
}
}
}
for(int z = 0 ;z<D ;z++){
for(int y = 0 ; y<D ;y++){
for(int d = 0 ;d<D;d++){
xsum[z][y] = xsum[z][y]+ array[z][y][d];
}
}
}
私は私のようなものを考えることができ、最も簡単なアルゴリズムを試してみました:
for(int x = 0 ; x<D ; x++) {
for(int y = 0 ; y<D ; y++) {
if(zsum[x][y]> 0){
for(int z = 0 ; z<D ;z++){
if(xsum[z][y] > 0 && ysum[x][z] > 0){
rearray[z][y][x]= 1;
zsum[x][y]-- ;
xsum[z][y]-- ;
ysum[x][z]-- ;
}
}
}
}
}
それは元の配列 に非常によく似気にいらを生成大胆番号が異なる:
1,1,0
0,1 、0
0,0,0
、1、
1,1,1-
、1、しかし、私はD = 4つのまたは5以上のエラーが を発生するとき
1,0,1 0,0,1
0,0,1
誰もこの問題を解決する正しいアルゴリズムを説明したり提案したりできますか?