Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- // Типа вектор с координатами i, j
- // i, j представляют собой индексы строк и столбцо
- // т. е. {0, 1} будет означать, что надо сдвинуться на 0 вниз (по строкам)
- // и на 1 вправо (по столбцам)
- struct Position
- {
- int i, j;
- };
- // Поворот вектора на 90 градусов по часовой стрелке
- Position rotate(Position v)
- {
- return {v.j, -v.i};
- }
- int main()
- {
- vector<vector<int>> matr; // двумерный массив, который буду выводить
- vector<int> values; // массив с значениями, которые будут пихаться в matr
- Position pos; // курсор. Показывает, куда надо записывать очередное значение из values
- Position direction; // направление. Показывает, куда смещаться на новую позицию
- int n; // количество значений
- cout << "n: ";
- cin >> n;
- matr = vector<vector<int>>(n, vector<int>(n, -1)); // -1 - элемент пустой, в него можно занести значение
- values = vector<int>(n * n);
- cout << "values: ";
- for(int & el : values)
- cin >> el;
- pos = {0, -1}; // -1 чтобы не менять дальше код в цикле
- direction = {0, 1}; // описано выше (см. Position)
- // i - индекс элемента, который будем ложить в matr из values
- for(int i = 0; i < n * n; i++)
- {
- Position newPos = {pos.i + direction.i, pos.j + direction.j}; // кандидат на новую позицию
- // если новая позиция выходит за границы, или этот элемент в matr уже занят
- if(newPos.i >= n || newPos.j >= n || matr[newPos.i][newPos.j] != -1)
- {
- direction = rotate(direction); // направление поворачиваем на 90 градусов
- newPos = {pos.i + direction.i, pos.j + direction.j}; // пересчитываем новую позицию
- }
- matr[newPos.i][newPos.j] = values[i]; // записываем значение из values
- pos = newPos; // обновляем текущую позицию
- }
- // вывод получившегося двумерного массива на экран
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < n; j++)
- cout << matr[i][j] << " ";
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement