c中的移位矩阵列

shift matrix columns in c

如何将矩阵的每一列向左移动行号? 例如

 0, 1, 2, 3
 4, 5, 6, 7
 8, 9,10,11
12,13,14,15 

这是一个4*4的矩阵,第一行索引为0,所以列不会移动, 第二行的索引为 1,因此每列将向左移动 1 个点(循环)。 给定矩阵的输出是 example

我的函数代码是:

void ShiftRows(int message[M][M])
{
    int temp = 0;
    for (int i = 1; i < M ; i++) 
    {
        for (int j = 0; j < M; j++)
        {
            temp = message[i][(j-i)%M];
            message[i][(j-i)%M] = message[i][j];
            message[i][j] = temp;
        } 
        temp = 0;
    }
}

您只交换了 2 个值。这不适用于循环移动整行。

void ShiftRows(int message[M][M])
{
    for (int i = 1; i < M ; i++) 
    {
        int temp[M];
        // First shift using a copy
        for (int j = 0; j < M; j++)
        {
            temp[j] = message[i][(j+i)%M];
        }

        // After whole row is shifted, copy back
        for (int j = 0; j < M; j++)
        {
            message[i][j] = temp[j];
        } 
    }
}