尝试在C中将矩阵旋转90度n次时发现问题

cygmwpex  于 2023-02-15  发布在  其他
关注(0)|答案(1)|浏览(101)

我遇到了一些问题,当我想用C编写一个程序,逆时针旋转90度一个矩阵,有不同的行和列的值,这是代码:

#include <stdio.h>

void swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

void transpose(int row, int column, int matrix[row][column])
{
    for (int i = 0; i < row; i++)
    {
        for (int j = i; j < column; j++)
        {
            swap(&matrix[i][j], &matrix[j][i]);
        }
    }
}

void reverseColumns(int row, int column, int matrix[row][column])
{
    for (int i = 0; i < column; i++)
    {   
        for (int j = 0, k = column - 1; j < k; j++, k--)
        {    
            swap(&matrix[j][i], &matrix[k][i]);
        }
    }
}

int main()
{
    int row, column;
    scanf("%d %d", &row, &column);

    int matrix[row][column];
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
        {
            scanf("%d", &matrix[i][j]);
        }
    }

    int rotation_times;
    scanf("%d", &rotation_times);
    rotation_times = rotation_times % 4;

    for(int i = 0; i < rotation_times; i++)
    {
        transpose(row, column, matrix);
        reverseColumns(row, column, matrix);
    }

    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

我想旋转一个2x3大小的矩阵2次,这是输入:

2 3
1 1 1
2 3 4
2

以下是预期输出:

4 3 2
1 1 1

这是实际输出:

0 0 422510592
4 3 2

我试图通过打印3行和3列来查看问题所在,结果如下:

0 0 -2119237632
4 3 2
1 1 1

有人知道发生了什么事以及如何修复吗?提前感谢。

gudnpqoy

gudnpqoy1#

在每个转置函数之后,列和行都将切换,因此可能需要考虑将(column,row)传递到下一个函数中。

相关问题