A1105 Spiral Matrix [螺旋矩阵]

在这里插入图片描述
先算出行列,然后算出层数和行数的关系,然后每一层再每个边赋值,类似于这样循环赋值找出关系就行
在这里插入图片描述

#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<math.h>
#include<algorithm>
#include<map>
#include<cstring>
#include<set>
using namespace std;
bool cmp(int a, int b)
{
	return a > b;
}
int main()
{
	int N, m, n, t = 0;
	cin >> N;
	for (n = sqrt(N); n >= 1; n--)
	{
		if (N % n == 0)
		{
			m = N / n;
			break;
		}
	}
	vector<int>a(N);
	for (int i = 0; i < N; i++)
	{
		cin >> 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-i&&t<N; j++)
		{
			b[i][j] = a[t++];
		}
		for (int j = i + 1; j < m - 1-i && t < N; j++)
		{
			b[j][n-1-i] = a[t++];
		}
		for (int j = n - 1 - i; j >= i && t < N; j--)
		{
			b[m - 1 - i][j] = a[t++];
		}
		for (int j = m - 2-i; j > i && t < N; j--)
		{
			b[j][i] = a[t++];
		}
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << b[i][j];
			if (j != n - 1) cout << " ";
		}
		cout << endl;
	}
	return 0;

}
posted @ 2020-08-07 22:12  _Hsiung  阅读(67)  评论(0编辑  收藏  举报