您的位置:首页 > 其它

PAT(Basic Level)_1050_螺旋矩阵

2017-07-27 13:30 573 查看
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<functional>

using namespace std;

int main(){
int N,m,n,nums[10000];
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",nums+i);
}
sort(nums,nums+N,greater<int>());
//for(int i=0;i<N;i++) printf("%d ",nums[i]);

for(int i=sqrt(N);i>0;i--){
if(N%i==0){
n=i;
m=N/n;
break;
}
}
//printf("%d %d",m,n);

int **matrix=new int*[m];
for(int i=0;i<m;i++){
matrix[i]=new int
;
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
matrix[i][j]=0;
}
}

int i=0,dir=0,x=0,y=0;
while(i<N){
if(!matrix[x][y]) matrix[x][y]=nums[i++];
switch(dir){
case 0:
if(y+1<n && !matrix[x][y+1]) y++;
else dir=1;
break;
case 1:
if(x+1<m && !matrix[x+1][y]) x++;
else dir=2;
break;
case 2:
if(y-1>=0 && !matrix[x][y-1]) y--;
else dir=3;
break;
case 3:
if(x-1>=0 && !matrix[x-1][y]) x--;
else dir=0;
break;
}
}

for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d",matrix[i][j]);
if(j==n-1) putchar('\n');
else putchar(' ');
}
}

for(int i=0;i<m;i++){
delete[]matrix[i];
}
delete[]matrix;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm pat 1050