我有这样的矩阵中C.矩阵指针到子矩阵用C
[1,2,3,4]
[5,6,7,8]
[9,10,11,12]
[13,14,15,16]
N×N的平方矩阵。
我需要把这个分成四个矩阵:
[1,2] [3,4] [9,10] [11,12]
[5,6] [7,8] [13,14] [15,16]
这将内部数组来表示这样的:
array[16] = [1,2,5,6,3,4,7,8,9,10,13,14,11,12,15,16]
到目前为止,我已经做到了这一点:
int i,j;
int k = 0;
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
array[k] = matrix[i][j];
k++;
}
}
for(i = 0; i < 2; i++)
{
for(j = 2; j < 4; j++)
{
array[k] = matrix[i][j];
k++;
}
}
for(i = 2; i < 4; i++)
{
for(j = 0; j < 2; j++)
{
array[k] = matrix[i][j];
k++;
}
}
for(i=2;i<4;i++)
{
for(j=2;j<4;j++)
{
array[k] = matrix[i][j];
k++;
}
}
正如你所看到的,我已经做了4倍,但是,有没有动态的ic方式做到这一点?如果我有一个更大的矩阵,如8 x 8,该怎么做?如果更大,则拆分与示例相同。
你是什么意思分裂是一样的?它是分解成相同数量的子矩阵,还是子矩阵大小保持不变? –
观察循环变量'i'和'j'的初始值和结束值的规律性。给定原始矩阵的大小和子矩阵的大小,规则是什么?如果你发现它们,应该很容易有一个外部循环或者两个嵌套的循环(而不是写入基本上相同的双循环四次或N!次),并计算正确的索引开始和结束值。编程是关于规则,避免代码重复。 –
@DrewMcGowen是的,如果一个矩阵是8x8,我会得到16个子矩阵2x2 – chantaman1