Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?
/*
Given an image represented by an NxN matrix, where each pixel in
the image is 4 bytes, write a method to rotate the image by 90 degrees.
Can you do this in place?
*/
const int N = 5;
void RotateMatrix(int matrix[][N]);
void PrintMatrix(int matrix[][N]);
void TestRotateMatrix();
#include <iostream>
#include "1_6_RotateMatrix.h"
using namespace std;
void RotateMatrix(int matrix[][N])
{
int count = (N / 2);
// 每次轉動一個圓,
for (int i = 0; i < count; ++i)
{
// 每次圓的邊長爲(N - i * 2 - 1)
int len = N - i * 2 - 1;
int size = N - 1;
for (int j = 0; j < len; ++j)
{
int tmp = matrix[i][i + j];
matrix[i][i + j] = matrix[size - i - j][i];
matrix[size - i - j][i] = matrix[size - i][size - i - j];
matrix[size - i][size - i - j] = matrix[i + j][size - i];
matrix[i + j][size - i] = tmp;
}
}
}
void PrintMatrix(int matrix[][N])
{
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
//cout << matrix[i][j] << ' ';
printf("%4d", matrix[i][j]);
}
cout << endl;
}
cout << endl;
}
void TestRotateMatrix()
{
int matrix[5][5] =
{
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
};
PrintMatrix(matrix);
RotateMatrix(matrix);
PrintMatrix(matrix);
}