Нужно заполнить матрицу с центра по спирали против часовой стрелки(лево-вниз-право-вверх)
Нахожу много подобных решений, но никак не могу подстроить под свое, вот что нашел, но это не то, здесь заполняется право-вниз-влево-вверх, мне же нужно лево-вниз-право-вверх
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
while (true)
{
cout << "Enter N size of matrix (0 - exit): ";
size_t n = 0;
std::cin >> n;
if (!n) break;
cout << endl;
vector<vector<int>> v(n, vector<int>(n));
size_t i = 0, j = n - 1;
int value = n * n - 1;
while (n != 0)
{
size_t k = 0;
do { v[i][j--] = value--; } while (++k < n - 1);
for (k = 0; k < n - 1; k++) v[i++][j] = value--;
for (k = 0; k < n - 1; k++) v[i][j++] = value--;
for (k = 0; k < n - 1; k++) v[i--][j] = value--;
++i; --j; n = n < 2 ? 0 : n - 2;
}
for (const auto &row : v)
{
for (int x : row) cout << setw(2) << x << ' ';
cout << endl;
}
cout << endl;
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Ну покумекали бы, что отвечает за направления
size_t i = 0, j = 0;
int value = n * n - 1;
while (n != 0)
{
size_t k = 0;
do { v[i][j++] = value--; } while (++k < n - 1);
for (k = 0; k < n - 1; k++) v[i++][j] = value--;
for (k = 0; k < n - 1; k++) v[i][j--] = value--;
for (k = 0; k < n - 1; k++) v[i--][j] = value--;
++i; ++j; n = n < 2 ? 0 : n - 2;
}