简化代码以避免在顺时针旋转2D矩阵时出现TLE

  • 本文关键字:2D TLE 旋转 顺时针 代码 c++
  • 更新时间 :
  • 英文 :


我有顺时针旋转2D矩阵的工作代码,但当k达到大数字时,我遇到了TLE(超过时间限制(问题。我不知道如何简化我的代码,我猜是for循环造成了这个问题,但我看不出没有它们就能让我的代码工作的方法。有没有其他方法可以简化我的代码以避免TLE?

#include <iostream>
#include <fstream>
using namespace std;
void funk(int a[][101], int n,int k);
int main()
{
int a[101][101],n,k;
ifstream ived;
ived.open("15.txt");
ived>>n>>k;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
ived>>a[i][j];
}
}
ived.close();
funk(a, n, k);
ofstream isved;
isved.open("15rez.txt");
for (int i=0;i<n; i++) {
for (int j=0; j<n; j++) {
isved<<a[i][j]<<" ";
}
isved<<endl;
}
isved.close();
return 0;
}

void funk(int a[][101], int n, int k) {
for (int pak=0; pak<k; pak++) {
for (int i=0; i<n/2; i++) {
for (int j=i; j<n-i-1; j++) {
int prad=a[i][j];
a[i][j] = a[n-1-j][i];
a[n-1-j][i] = a[n-1-i][n-1-j];
a[n-1-i][n-1-j] = a[j][n-1-i];
a[j][n-1-i]=prad;
}
}
}
}

如果k是矩阵应该旋转的次数,那么您可以使用这样一个事实,即在4次旋转后,它会转化为自己。因此,如果用k % 4替换k,从而用O(1)替换O(k)算法,结果将是相同的。

最新更新