【1105】Spiral Matrix (25分)【螺旋矩阵】

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
#include<functional>
using namespace std;
//外层for遍历每一包裹的层,内4个for分别为右下左上
int cmp(int a,int b){return a>b;}
int main(){
	int N,m,n,t=0;
	scanf("%d",&N);
	for(n=sqrt((double)N);n>=1;n--){
		if(N%n==0){
			m=N/n;//m行n列
			break;
		}
	}
	vector<int>a(N);//共N个数
	for(int i=0;i<N;i++)
		scanf("%d",&a[i]);
	sort(a.begin(),a.end(),cmp);
	vector<vector<int>>b(m,vector<int>(n));
	int level=m/2+m%2;
	for(int i=0;i<level;i++){
		for(int j=i;j<=n-1-i&&t<=N-1;j++)
			b[i][j]=a[t++];
		for(int j=i+1;j<=m-2-i&&t<=N-1;j++)
			b[j][n-1-i]=a[t++];
		for(int j=n-i-1;j>=i&&t<=N-1;j--)
			b[m-1-i][j]=a[t++];
		for(int j=m-2-i;j>=i+1&&t<=N-1;j--)
			b[j][i]=a[t++];
	}
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			printf("%d",b[i][j]);
			if(j!= n-1) printf(" ");
		}
		printf("\n");
	}
	system("pause");
	return 0;
}

另外可以参考一下日佬的螺旋填充(改变方向)方法

https://blog.csdn.net/richenyunqi/article/details/79530619

发布了179 篇原创文章 · 获赞 12 · 访问量 6971

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/104045875
今日推荐