For an example if the array is (let's assume 5x5 array)
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
and if we rotate it by 180 degrees it will look like
21 22 23 24 25
16 17 18 19 20
11 12 13 14 15
6 7 8 9 10
1 2 3 4 5
we can acheieve it by swapping first row and last row , second row and fourth row.
But to achieve 90 degree rotation the steps are
i) rotate array by 180 degrees first .
ii)for every element(i,j) in 2D matrix , if i < j swap (i,j) and (j,i) .
So the output will be 90 degrees rotated
21 16 11 6 1
22 17 12 7 2
23 18 13 8 3
24 19 14 9 4
25 20 15 10 5
Note :Here we are doing it in place.This will work only if m and n are same. otherwise we need to create a new array of size nxm .
Code : (in C)
{
int i,j,rows=m-1,temp;
//rotate array by 180 degrees
for(i=0;i<=rows/2;i++)
{
if(rows<=i)
break;
for(j=0;j < n;j++)
{
temp=array[i][j];
array[i][j]=array[rows][j];
array[rows][j]=temp;
}
rows--;
}
//swap elements to rotate array by 90 degrees
for(i=0;i < m;i++)
{
for(j=0;j < n;j++)
{
if(i < j)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
}
}
Please let me know if there is any bug in the above code and your suggestions are always welcome .
2 comments:
if you rotate
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
by 180 degrees resultant matrix is
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10 9 8 7 6
5 4 3 2 1
what is the main??
Post a Comment