Solution #1: Rotation of a matrix by a certain angle (+90, -90, +180, -180) can be done by a combination of basic operations like transpose, column swapping and row swapping. For example, to rotate a matrix by +90 degrees just transpose it and then swap the columns. Rest of the rotations can be done using a similar approach. Below is the code for +90 degrees rotation,
#define N 5 void printMatrix(int mat[N][N]) { int i=0; int j=0; for(i=0; i < N; i++) { for(j=0; j < N; j++) printf("%d ", mat[i][j]); printf("\n"); } } void initMatrix(int mat[N][N]) { int i=0; int j=0; srand(time(NULL)); for(i=0; i < N; i++) for(j=0; j < N; j++) mat[i][j] = rand() % 10; } void transpose(int mat[N][N]) { int i=0; int j=0; for(i=0; i < N; i++) { for(j=i; j < N; j++) { int temp = mat[i][j]; mat[i][j] = mat[j][i]; mat[j][i] = temp; } } } void swapCol(int mat[N][N]) { int i=0; int j=0; for(i=0; i < N; i++) { for(j=0; j < N/2; j++) { int temp = mat[i][j]; mat[i][j] = mat[i][N-1-j]; mat[i][N-1-j] = temp; } } } int main() { int matrix[N][N] = {0, }; //initialize and print matrix initMatrix(matrix); printMatrix(matrix); printf("\n"); //transpose and swap columns to rotate by +90 transpose(matrix); swapCol(matrix); printMatrix(matrix); }
2 comments:
Thanks for the ideas and code. Though, wouldn't a +90 be counter clockwise, and -90 the way your code is working?
Beautiful and clear code. Really liked it. I have also written a similar post here - http://k2code.blogspot.in/2014/03/rotate-n-n-matrix-by-90-degrees.html.
Post a Comment