top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

How would you rotate an NxN matrix by 90 degrees clockwise?

+6 votes
1,771 views

.

posted Nov 18, 2013 by Anuj Yadav

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

3 Answers

+2 votes
void rotate(int[][] matrix, int n) 
{
    for (int layer = 0; layer < n / 2; ++layer) 
    {
        int first = layer;
        int last = n - 1 - layer;
        for(int i = first; i < last; ++i) 
        {
            int offset = i - first;
            int top = matrix[first][i];

            matrix[first][i] = matrix[last-offset][first];

            matrix[last-offset][first] = matrix[last][last - offset];

            matrix[last][last - offset] = matrix[i][last];

            matrix[i][last] = top;
        }
    }
}
answer Nov 18, 2013 by Vikas Upadhyay
+2 votes

Take transpose of matrix and then filp it:-
Complete c++ program

#include <iostream>
using namespace std;


void swap(int* a,int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    return;
}

int main()
{
    int n;
    int i,j;
    cin>>n;
    int matrix[n][n];

    //input the matrix
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>matrix[i][j];
        }
    }

    //print the original matrix
    cout<<"The original matrix\n";
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cout<<matrix[i][j]<<" ";
        }
        cout<<endl;
    }

    //Transpose
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            swap(&matrix[i][j],&matrix[j][i]);
        }
    }
    //Flip
    for(i=0;i<n;i++)
    {
        for(j=0;j<n/2;j++)
        {
            swap(&matrix[i][j],&matrix[i][n-j-1]);
        }
    }
    cout<<"The matrix after 90 degree clockwise rotation\n";
    //print the result
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cout<<matrix[i][j]<<" ";
        }
        cout<<endl;
    }

    return 0;
}
answer Nov 20, 2013 by Vinod Kumar
0 votes

Tested and working C++ code, You can test here : My Code School

#include<iostream>
#include<cstdio>
#include<cmath>

using namespace std;
int main()
{   
   //Write your code here
   //Include headers as needed
   int t, n, tmp, jhn, khn;
   cin >> t;
   for(int i=0; i<t; i++)
   {
       cin >> n;
       int ** a = new int*[n];
       for(int j=0; j<n; j++)
       {
           a[j] = new int[n];
       }
       for(int j=0; j<n; j++)
       {
           for(int k=0; k<n; k++)
           {
               cin >> a[j][k];
           }
       }
       if(n%2 == 0)
       {
            jhn = n/2;
            khn = n/2;
       }
       else
       {
           jhn = (n+1)/2;
           khn = (n-1)/2;
       }
       for(int j=0; j<jhn; j++)
       {
           for(int k=0; k<khn; k++)
           {
               tmp = a[j][k];
               a[j][k] = a[n-k-1][j];
               a[n-k-1][j] = a[n-j-1][n-k-1];
               a[n-j-1][n-k-1] = a[k][n-j-1];
               a[k][n-j-1] = tmp;
           }
       }
       for(int j=0; j<n; j++)
       {
           for(int k=0; k<n; k++)
           {
               cout << a[j][k];
               if(k != n-1) cout << " ";
           }
           cout << endl;
       }
       for(int j=0; j<n; j++)
       {
            delete[] a[j];
       }
       delete[] a;
       cout << endl;
   }
}
answer Nov 24, 2013 by Raghu
for(int i=0; i<t; i++)
{
       for(int j=0; j<n; j++)
       {
           for(int k=0; k<n; k++)
       }
       for(int j=0; j<jhn; j++)
       {
           for(int k=0; k<khn; k++)
           {
           }
       }
       for(int j=0; j<n; j++)
       {
           for(int k=0; k<n; k++)
           {
           }
           cout << endl;
       }
       for(int j=0; j<n; j++)
       {
       }
       
}

What you did with the complexity.
Its better to read posted answer first. :)
Similar Questions
0 votes

Write a c program that rotate elements of an array by the value of configured number "n".
For example:
Input array[ ] = { 2, 3, 5, 6, 8, 9}
value of n = 2
Output array[] = { 5, 6, 8, 9, 2, 3}
I am looking for efficient program.

+6 votes

Given a matrix with 1s and 0s, please find the number of groups of 1s. A group is defined by horizontally or vertically adjacent 1s.

+5 votes

How to implement a function to check whether there is a path for a string in a matrix of characters? It moves to left, right, up and down in a matrix, and a cell for a movement. The path can start from any entry in a matrix. If a cell is occupied by a character of a string on the path, it cannot be occupied by another character again.

+7 votes

You have a 2D matrix. Only two ZEROs in matrix.
Find the path from 1st zero to 2nd zero with least sum.

1       6       8       9       0       3

4       9       -5      5       11      13

8       9       44      23      15      -20

7       9       7       -13     14      11      

0       16      23      31      16      7

67      5       4       23      21      19

Answer

1       6       8       9       0  ----> 3
                                         |
4       9       -5      5       11      13
                                         |
8       9       44      23      15      -20
                                         |
7 <---- 9 <---- 7 <--- -13 <--- 14 <---  11     
|
0       16      23      31      16        7

67      5       4       23      21       19
+3 votes

Given an active stream of sorted arrays, how would you merge them efficiently?
C or Java code would be helpful?

...