AcWing 1595. 螺旋矩阵
原题链接
中等
作者:
leo123456
,
2020-08-31 16:37:48
,
所有人可见
,
阅读 453
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=10010;
int n;
int w[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>w[i];
sort(w,w+n,greater<int>());
int r,c;//行 列
for(int i=1;i<=n/i;i++) //枚举列 ,列<=行
if(n%i==0)
{
r=n/i; //行
c=i; //列
}
vector<vector<int>> res(r,vector<int>(c)); 有c个vector,每一行又是一个vector 就变成了就一个矩阵了//r行 c列
//int res[r][c]={};
int dx[]={-1,0,1,0},dy[4]={0,1,0,-1};
for(int i=0,x=0,y=0,d=1;i<n;i++)
{
res[x][y]=w[i];
int a=x+dx[d],b=y+dy[d];
if(a<0||a>=r||b<0||b>=c||res[a][b])
{
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
for(int i=0;i<r;i++)
{
cout<<res[i][0];
for(int j=1;j<c;j++)
cout<<' '<<res[i][j];
cout<<endl;
}
return 0;
}