【发布时间】:2020-11-30 07:33:07
【问题描述】:
给定一个大小为 N x N 的方阵 mat[ ][ ]。任务是在不使用任何额外空间的情况下将其逆时针方向旋转 90 度。 Problem Link
我的逻辑 - 对于矩阵 N x N,通过使用临时变量 X-1 时间从左列 -> 底行 -> 右列 -> 顶行交换元素,以逆时针方向旋转外部窗口,其中 X 是外窗的尺寸。我不知道为什么它不起作用。请帮我找出问题。
#include<bits/stdc++.h>
using namespace std;
int main() {
int t=1; cin>>t;
while (t--) {
int n; cin>>n; vector<vector<int>>a(n,vector<int>(n));
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];
for(int k=0;k<n;k++) {
int i=k, j=0, p=n-1-k, q=p-i, temp;
while (q-- && i<p) {
temp=a[i][i];j=i;
while (j<=p) {
swap(temp, a[j][i]);j++;
}j=i+1;
while (j<=p) {
swap(temp, a[p][j]);j++;
}j=p-1;
while (j>=i) {
swap(temp, a[j][p]); j--;
}j=p-1;
while (j>=i) {
swap(temp, a[i][j]); j--;
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout<<a[i][j]<<" ";
cout<<"\n";
}
cout<<"\n";
}
}
谢谢
【问题讨论】:
-
请不要使用这样的宏。它使代码更难阅读。
-
看到
#define FOR ...停止阅读。 -
cin>>n; int a[n][n];不是有效的 C++。请改用vector。 -
比无效更糟糕的是,当编译器扩展允许
cin>>n; int a[n][n];允许用户非常非常容易地溢出堆栈时。低至 1000 的n可能会毁了你一整天。 -
在开发环境的调试器中使用一个小的输入集(如 1 2 1 2 3 4)单步执行程序,并观察发生的情况。通常这会很有帮助。
标签: c++ algorithm matrix logic implementation