Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created December 7, 2016 23:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/d8843e292df6e9070e5f55c907ad0f69 to your computer and use it in GitHub Desktop.
Save jianminchen/d8843e292df6e9070e5f55c907ad0f69 to your computer and use it in GitHub Desktop.
Matrix Rotation - study code - google, like the variable name: int tl_corner, top-left corner, and also 4 comments lines for each for loop.
#include <iostream>
using namespace std;
int main() {
int m,n,r;
cin >> m >> n >> r;
int matrix[m][n];
for (int i = 0; i < m; ++i) {
for (int j=0; j<n; ++j) {
cin>>matrix[i][j];
}
}
// find how many layers do we need to rotate.
int layer = n;
if (m < n) {
layer = m;
}
for (int i =0; i < (layer>>1); ++i){
int new_n = n-2*i;
int new_m = m -2*i;
int rotate = r%(2*new_n+2*new_m-4);
while(rotate--){
// rotate top row to the left by 1.
int tl_corner = matrix[i][i];
for (int c= i; c < n - 1 - i;++c){
matrix[i][c] = matrix[i][c+1];
}
// rotate right column up by 1.
for (int r=i; r< m- 1- i;++r) {
matrix[r][n-1-i] = matrix[r+1][n-1-i];
}
// rotate bottom right by 1.
for (int c=n-1-i; c>i; --c){
matrix[m-1-i][c] = matrix[m-1-i][c-1];
}
// rotate left column down by 1.
for (int r=m-1-i; r>i+1; --r) {
matrix[r][i]=matrix[r-1][i];
}
matrix[i+1][i] = tl_corner;
}
}
for (int i =0; i<m; ++i) {
for (int j=0; j <n; ++j){
printf("%d%s", matrix[i][j], ((j!=n-1)?" ":"\n"));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment