题解 | #C++将正方形矩阵顺时针旋转90度#
将正方形矩阵顺时针旋转90度
http://www.nowcoder.com/practice/b9ae0d2de71846b98e068a48d13364d0
详细思路看注释
#include <iostream> #include <vector> using namespace std; void circle(vector<vector<int>> &arr, int instR, int instC, int inendR, int inendC) { //因为是旋转正方形矩阵,因此只需要起始位置在终止位置左上角即可 //特殊情况 if (instR > inendR || instC > inendC) return; //正常情况 else { int stR = instR; int stC = instC; int endR = inendR; int endC = inendC; //按位置,一个一个进行替换 /* 1**2 **** **** 4**3 4->1 1->2 2->3 3->4 然后依次往后顺延 *1** ***2 4*** **3* 4->1 1->2 2->3 3->4 ... */ for (int i = 0; i < endR - stR; i++) { int tem = arr[stR][stC+i]; arr[stR][stC+i] = arr[endR-i][stC]; arr[endR-i][stC] = arr[endR][endC-i]; arr[endR][endC-i] = arr[stR+i][endC]; arr[stR+i][endC] = tem; } circle(arr, instR + 1, instC + 1, inendR - 1, inendC - 1); } } int main() { int n;//首先接收当前的输入数组 while (cin >> n) { vector<vector<int>>arr(n, vector<int>(n,0)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> arr[i][j]; } } //进行逆时针旋转 circle(arr,0,0,n-1,n-1); //按顺序输出到屏幕上 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << arr[i][j] << " "; } cout << endl; } } return 0; }