皓仔的螺旋遍历(时间空间极致版)
2026-03-17 19:49:13
发布于:江苏
19阅读
0回复
0点赞
废话不多,上代码
时间极致
#include<cstdio>
inline int read(){int x=0;char c=getchar();while(c<'0'||c>'9')c=getchar();while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x;}
inline void write(int x){if(x>9)write(x/10);putchar(x%10+'0');}
int main(){
int n=read(),i,j,l=0,r=n-1,u=0,d=n-1,c=0;
int *a=new int[n*n];
for(i=0;i<n*n;i++)a[i]=read();
while(l<=r&&u<=d){
for(i=l;i<=r;i++){if(c++){putchar(' ');}write(a[u*n+i]);}u++;
for(i=u;i<=d;i++){putchar(' ');write(a[i*n+r]);}r--;
if(u<=d)for(i=r;i>=l;i--){putchar(' ');write(a[d*n+i]);}d--;
if(l<=r)for(i=d;i>=u;i--){putchar(' ');write(a[i*n+l]);}l++;
}
delete[] a;
return 0;
}
用时 内存
51ms 6.26MB
空间极致
#include<cstdio>
using namespace std;
int main(){
int n,a[1001][1001]={};
scanf("%d",&n);
if(n==1){
scanf("%d",&n);
printf("%d",n);
return 0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=4;i++){
for(int j=(n-1)*i-(n-2),k=1,l=n;j<=(n-1)*i;j++,k++,l--){
if(i==1){
printf("%d ",a[1][k]);
a[1][k]=0;
}if(i==2){
printf("%d ",a[k][n]);
a[k][n]=0;
}if(i==3){
printf("%d ",a[n][l]);
a[n][l]=0;
}if(i==4){
printf("%d ",a[l][1]);
a[l][1]=0;
}
}
}
for(int i=4*(n-1)+1,j=2,k=2;i<=n*n;i++){
printf("%d ",a[j][k]);
a[j][k]=0;
if(a[j][k-1]==0&&a[j-1][k]==0&&a[j+1][k]!=0&&a[j][k+1]!=0)k++;
else if(a[j][k-1]==0&&a[j-1][k]==0&&a[j+1][k]!=0&&a[j][k+1]==0)j++;
else if(a[j][k-1]!=0&&a[j-1][k]==0&&a[j+1][k]!=0&&a[j][k+1]==0)j++;
else if(a[j][k-1]!=0&&a[j-1][k]==0&&a[j+1][k]==0&&a[j][k+1]==0)k--;
else if(a[j][k-1]!=0&&a[j-1][k]!=0&&a[j+1][k]==0&&a[j][k+1]==0)k--;
else if(a[j][k-1]==0&&a[j-1][k]!=0&&a[j+1][k]==0&&a[j][k+1]==0)j--;
else if(a[j][k-1]==0&&a[j-1][k]!=0&&a[j+1][k]==0&&a[j][k+1]!=0)j--;
else if(a[j][k-1]==0&&a[j-1][k]==0&&a[j+1][k]==0&&a[j][k+1]!=0)k++;
}
}
用时 内存
94ms 5.43MB
这里空空如也







有帮助,赞一个