C - matrix rotation

六眼飞鱼酱① 提交于 2020-03-06 03:50:43

问题


I'm writing a program in C and I need a M x N matrix to rotate clockwise. I tried some algorithms, but they only work in N x N matrices.

The matrix {(1,4), (2,5), (3,6)} should become {(3,2,1), (6,5,4)}:

1 4
2 5  ->  3 2 1
3 6      6 5 4

I wrote this piece of code to transpose the matrix, and now I don't know how to swap the columns:

void transpose(int matrix[MAX][MAX], int m, int n)
{
    int transpose[MAX][MAX], d, c;

    for (c = 0; c < m; c++)
      for( d = 0 ; d < n ; d++)
         transpose[d][c] = matrix[c][d];

    for (c = 0; c < n; c++)
        for(d = 0; d < m; d++)
            matrix[c][d] = transpose[c][d];
}

回答1:


Here's an idea. I've implemented it in Java, but it should work in the same manner in C. The idea is to read the array row major wise from the end, and fill the other array column major wise, from the beginning.

    int a[][]={{1,4},{2,5},{3,6}};
    int m=3,n=2;   //you will need to edit this and actually calculate rows and columns.

    int b[][]=new int[n][m];

    for(int i=m-1; i>=0; i--)
      for(int j=0; j<n; j++)
        b[j][m-i-1]=a[i][j];


    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++)
           System.out.print(b[i][j]+"\t");
        System.out.println();
    }

Output at: https://ideone.com/TveuB5



来源:https://stackoverflow.com/questions/30647682/c-matrix-rotation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!