用数组输出矩形方阵C语言,数组与矩阵:将正方形矩阵顺时针转动90°(C++版)...

该博客介绍了如何实现一个C++算法,将给定的N×N矩阵按顺时针方向旋转90度。通过逐层旋转的方式,保持额外空间复杂度为O(1)。博客提供了完整的代码示例,包括旋转核心函数`rotateEdge`以及辅助打印和生成矩阵的函数。
摘要由CSDN通过智能技术生成

//★题目:将正方形矩阵顺时针转动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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值