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;
}