c++ 如何使用其他9个矩阵填充一个矩阵的内容?

lfapxunr  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(165)

我在做一个数独游戏
我有9个3x3矩阵和一个大的9x9矩阵。我尝试的方法不工作,所以请帮助我:

void matrix_full_creation()
 {
    for(i=0;i<3;i++)
        {   
            for(j=0;j<3;j++)
            {
        
                matrix_full[i][j]==matrix1[i][j];
                matrix_full[i][j+3]=matrix2[i][j];
                matrix_full[i][j+6]=matrix3[i][j];
            
                matrix_full[i+3][j]=matrix4[i][j];
                matrix_full[i+3][j+3]=matrix5[i][j];
                matrix_full[i+3][j+3]=matrix6[i][j];

                matrix_full[i+6][j]=matrix7[i][j];
                matrix_full[i+6][j+3]=matrix8[i][j];
                matrix_full[i+6][j+6]=matrix9[i][j];
            }
        }
}
ivqmmu1c

ivqmmu1c1#

让我们把你的任务分解成更小的部分。首先,写一个函数把你的小矩阵复制到特定的位置

void Copy(int** small, int i, int j);

所以如果你给i,j传递0,0...它应该把small的内容复制到大的9 x9矩阵的左上角的3x 3子矩阵中。
当您完成此任务时,只需运行一个for循环(类似于您已经做过的循环)

int** bigMatrix; // assume we have it here

void Copy(int** small, int i, int j) {
    for(int ii = 0; ii < 3; ++ii) {
        for(int jj = 0; jj < 3; ++jj) {
            bigMatrix[i + ii][j + jj] = small[ii][jj];
        }
    }
}

int main() {
    int smalls[3][3][3] = {...}; // assume we have 3x3 init here

    for(int i = 0; i < 9; i += 3) {
        for(int j = 0; j < 9; j += 3) {
            Copy(smalls[0], i, j];
        }
    }
    return 0;
}

好建议:分而治之!

lnlaulya

lnlaulya2#

  • 给定子矩阵索引n和该子矩阵内的一对索引,即行索引i和列索引j,以及
  • 考虑到你想要将每个子矩阵放置在全矩阵的位置(0,0)(0,1) ...,(3,3)
  • 可以遍历每个子矩阵的每个单元格
  • 使用以下公式计算完整矩阵中的目标单元格:
matrix_full[3*(n / 3) + i][3*(n % 3) + j] = submatrix[i][j];

Demo(https://godbolt.org/z/o9j5qY4Yh)

q5lcpyga

q5lcpyga3#

我已更正您的代码。请尝试以下操作:

for(i=0;i<3;i++)
    {   
        for(j=0;j<3;j++)
        {
    
            matrix_full[i][j]=matrix1[i][j];
            matrix_full[i][j+3]=matrix2[i][j];
            matrix_full[i][j+6]=matrix3[i][j];
        
            matrix_full[i+3][j]=matrix4[i][j];
            matrix_full[i+3][j+3]=matrix5[i][j];
            matrix_full[i+3][j+6]=matrix6[i][j];

            matrix_full[i+6][j]=matrix7[i][j];
            matrix_full[i+6][j+3]=matrix8[i][j];
            matrix_full[i+6][j+6]=matrix9[i][j];
        }
    }

希望这有帮助!:D

相关问题