主对角线中的置换条目

时间:2016-12-06 15:19:50

标签: algorithm matrix permutation

如果我有8 * 8矩阵。具有以下值

希望它像下面那样置换

这样对角线分为顶部和底部两部分。第一个条目1在底部的第一个位置填充。第二个条目2放置在顶部的第一个位置,依此类推。

我想将这个想法扩展到矩阵的其他对角线。

for(int row = 0; row < dimension; row++){ for(int col = 0; col < dimension; col++){ if(row == col){ // Do something to this cell. } } }

1 个答案:

答案 0 :(得分:0)

我认为最直接的解决方案是首先将对角线值保存到其他数组中,然后将其元素循环复制到它们的位置。

C中的可能解决方案:

int top = 0; // Index where the top part currently is
int bottom = SIZE/2; // Index where the bottom part currently is
int diagonal[SIZE]; // Additional array, which stores the diagonal elements

for(int i = 0; i < SIZE; i++)
    diagonal[i] = matrix[i][i]; // Fill the additional array with diagonal elements

for(int i = 0; i < SIZE; i++)
{
    if(i%2 == 0) // put it to lower part
    {
        matrix[bottom][bottom] = diagonal[i];
        bottom++; // Update the bottom index
    }

    else // put it to upper part
    {
        matrix[top][top] = diagonal[i];
        top++; // Update the top index
    }
}

请注意,SIZE必须是偶数,才能使其像您描述的那样工作。