正方形顺时针旋转90度c++
时间: 2025-01-19 09:00:24 AIGC 浏览: 74 评论: 4
### 实现正方形矩阵顺时针旋转90度
为了实现一个正方形矩阵的顺时针旋转90度操作,可以采用两种主要方法:一种是创建一个新的矩阵来存储旋转后的结果;另一种是在原地进行旋转。下面分别介绍这两种方式。
#### 方法一:使用额外空间的新矩阵
这种方法较为直观简单,在原有基础上构建新的矩阵用于保存旋转之后的数据。通过遍历原始数组并按照特定规律映射到新位置上完成整个过程[^2]。
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// 定义两个二维数组,一个是源数据a[][],另一个是用来存放下一步计算的结果b[][]
int a[201][201], b[201][201];
// 输入矩阵元素
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> a[i][j];
}
}
// 将矩阵逆序列方向读取赋值给目标矩阵对应行的位置
for (int j = n - 1; j >= 0; --j) {
for (int i = 0; i < n; ++i) {
b[i][n - 1 - j] = a[j][i];
}
}
// 输出转换后的矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << b[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
此段代码实现了利用辅助矩阵`b[][]`来进行矩阵旋转的功能。对于每一个位于`(row, col)`处的元素来说,它会被移动至`(col, newRowSize-row-1)`这个新坐标点上去。
#### 方法二:不使用额外空间的原地旋转
如果希望节省内存开销,则可以选择直接在原来的矩阵内部调整各个元素之间的相对关系从而达到同样的效果。这种方式虽然稍微复杂一点但是效率更高一些因为不需要额外分配大量的连续内存块[^1]。
以下是具体的实现思路:
1. 对于每一圈(即最外面一层),依次交换四个角上的数值;
2. 同样地处理该圈内的其他所有相邻单元格直到这一层完全翻转完毕;
3. 继续向内推进重复上述两步直至所有的层次都被处理过为止。
下面是基于以上逻辑编写的C++程序片段:
```cpp
void rotateInPlace(vector<vector<int>>& matrix) {
const size_t N = matrix.size();
if (!N || !matrix[0].size()) return ;
for(size_t layer = 0; layer < N / 2; ++layer){
size_t first = layer;
size_t last = N - 1 - layer;
for(size_t i = first; i < last; ++i){
size_t offset = i - first;
// Save top.
int top = matrix[first][i];
// left -> top
matrix[first][i] = matrix[last-offset][first];
// bottom -> left
matrix[last-offset][first] = matrix[last][last - offset];
// right - offset] = matrix[i][last];
// top -> right
matrix[i][last] = top;
}
}
}
// 测试函数调用部分省略...
```
这段代码展示了如何在一个已知大小为 `NxN` 的方阵中执行就地旋转变换的操作。注意这里假设输入的是合法且完整的矩形区域,并且已经包含了必要的边界条件判断语句以防止越界访问等问题的发生。
阅读全文
相关推荐




















评论

张博士-体态康复
2025.08.15
文中所展示的代码示例清晰,逻辑严谨,有助于读者更好地理解和掌握矩阵旋转的核心算法。

坐在地心看宇宙
2025.07.30
### 对于实现正方形矩阵顺时针旋转90度的讨论
此篇文档详细讲解了两种实现正方形矩阵顺时针旋转90度的方法,并分别提供了相应的C++代码示例,非常适合需要此类功能的读者。

daidaiyijiu
2025.07.02
#### 方法一:使用额外空间的新矩阵
此方法通过创建一个新矩阵并逐个填充旋转后的元素位置,虽然直观易懂,但占用更多内存空间。🦊

葡萄的眼泪
2025.06.14
#### 方法二:不使用额外空间的原地旋转
该方法更为高效,直接在原矩阵上进行操作,不额外占用内存,适合需要节省资源的场景。