//★题目:将正方形矩阵顺时针转动90°
//要求:给定一个N×N的矩阵matrix,把这个矩阵调整成顺时针转动90°后的形式。要求额外空间复杂度为O(1)
// 例如:1 2 3 4 调整后为 13 9 5 1
// 5 6 7 8 14 10 6 2
// 9 10 11 12 15 11 7 3
// 13 14 15 16 16 12 8 4
//分析:逐层旋转
#include
#include
using namespace std;
void rotate(vector> &matrix);
void rotateEdge(vector> &matrix, int index);
void printVector2(vector> matrix);
vector> generateStandard2Vector(int setCols, int setRows);
int main()
{
vector> matrix = generateStandard2Vector(4, 4);
printVector2(matrix);
//spiralOrderPrint(matrix);
cout << endl;
rotate(matrix);
printVector2(matrix);
system("pause");
return 0;
}
void rotate(vector> &matrix)
{
int index = 0;
while (index<=(matrix.size()/2))
{
rotateEdge(matrix, index);
index++;
}
}
void rotateEdge(vector> &matrix, int index)
{
int maxIndex = matrix.size() - 1;
for (int i = index; i < maxIndex-index; i++)
{
int tmp = matrix[index][i];
matrix[index][i] = matrix[maxIndex - i][index];
matrix[maxIndex - i][index] = matrix[maxIndex - index][maxIndex - i];
matrix[maxIndex - index][maxIndex - i] = matrix[i][maxIndex - index];
matrix[i][maxIndex - index] = tmp;
}
}
void printVector2(vector> matrix)//打印二维矩阵
{
int cols = matrix[0].size();
int rows = matrix.size();
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << matrix[i][j];
if (matrix[i][j]<10)cout << " ";
else cout << " ";
}
cout << endl;
}
}
vector> generateStandard2Vector(int setCols,int setRows)//生成二维矩阵
{
int setNum = 0;
vector> result;
vector tmp;
if ((setCols==0)||(setRows==0))
{
return result;
}
static int rows = 0;
while (rows < setRows)
{
tmp.clear();
for (int cols = 0; cols < setCols; cols++)
{
setNum++;
tmp.push_back(setNum);
}
result.push_back(tmp);
rows++;
}
return result;
}