Решение задачи "Спираль" с Меньшиков

Без пояснения   Просмотров: 18


Вывести квадрат, состоящий из NxN клеток, заполненных числами от 1 до N2 по спирали (см. примеры).

Код

#include <iostream>
#include <vector>
 
using namespace std;
int n;
vector<vector<int> > mas;
void input()
{
    cin>>n;
    mas = vector<vector<int> >(n,vector<int>(n,0));
}
bool correct(int x, int y)
{
    if (x<0 || y<0)
        return false;
    if (x>=n || y>=n)
        return false;
    return true;
}
int pos = 0;
int moveX[4] = {0,1,0,-1};
int moveY[4] = {1,0,-1,0};
void solve()
{
    int x = 0;
    int y = 0;
    for (int i=1;i<=n*n;i++)
    {
        mas[x][y] = i;
        int nextX = x + moveX[pos];
        int nextY = y + moveY[pos];
        if (correct(nextX,nextY) && !mas[nextX][nextY])
        {
            x = nextX;
            y = nextY;
        }
        else
        {
            pos = (pos+1)%4;
            x = x + moveX[pos];
            y = y + moveY[pos];
        }
    }
}
void output()
{
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
        {
            cout.width(6);
            cout<<mas[i][j];
        }
        cout<<endl;
    }
}
int main()
{
    input();
    solve();
    output();
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться