Follow up:
Could you do this in-place?
使用快捷鍵:
/* Copright Reserved by MiracleCoder
* No permit to delete the link: http://blog.csdn.net/idc_void
*/
#define N 4
void PrintMatrix( int m[N][N], const char *str )
{
cout << str << endl;
for ( int i = 0; i < N; ++i )
{
for ( int j = 0; j < N; ++j )
{
cout << m[i][j] << "\t";
}
cout << endl;
}
}
void Rotate( int matrix[N][N])
{
if( matrix == NULL )
return;
// print
PrintMatrix( matrix, "Before");
for ( int i = 0; i < N; ++i )
{
for ( int j = 0; j < i; ++j ) // Condition: j < i
swap( matrix[i][j], matrix[j][i]);
}
for ( int i = 0; i < N; ++i )
{
for ( int j = 0; j < N/2; ++j ) // 次數確定:每次減兩個,直到只剩下一個或者零個
swap( matrix[i][j] , matrix[i][N-j-1] );
}
// print
PrintMatrix( matrix, "After rotate 90 degree\n");
}
void Rotate90Degree( int matrix[N][N] )
{
// print
PrintMatrix( matrix, "Before");
for ( int i = 0; i < N/2; ++i )
{
for( int j = i; j < N - 1 - i; ++j ){
int value = matrix[i][j];
matrix[i][j] = matrix[N-1-j][i];
matrix[N-1-j][i] = matrix[N-i-1][N-1-j];
matrix[N-i-1][N-1-j] = matrix[j][N-i-1];
matrix[j][N-i-1] = value;
}
}
PrintMatrix( matrix, "After rotate 90 degree\n");
}