Как заполнить двумерный массив зигзагом по диагонали на С++?

Надо заполнить массив 5х5 от 1 до 25 по данной схеме введите сюда описание изображения

Я не понимаю как это сделать, у меня выходит только заполнить сверху вниз змейкой.


Ответы (2 шт):

Автор решения: Zhihar

ну вроде как движение по массиву очевидно

x = 0
y = size

этап 1)

x += 1

этап 2) до тех пор пока x != 0

x -= 1
y -= 1

этап 3)

x -= 1

этап 4) пока y != size или x != 0

x += 1
y += 1

повторять пока x != size и y != 0

→ Ссылка
Автор решения: TigerTV.ru

Используя автоматное программирование:

#include <iostream>

int main() {
    enum states {right, up, leftUp, rightDown} state;
    const int size = 5;
    int a[size][size] = {0};    

    int x = 0;
    int y = size - 1;
    state = right;

    for (int i = 1; i <= size*size; ++i) {
        a[y][x] = i;
        switch (state) {
        case right:
            ++x; 
            if (y == 0) {
                state = rightDown;
            } else {
                state = leftUp;
            }
            break;

        case up:
            --y; 
            if (x == 0) {
                state = rightDown;
            } else {
                state = leftUp;
            }
            break;

        case leftUp:
            x--;
            y--;
            if(x == 0) state = up;
            if(y == 0) state = right;
            break;

        case rightDown:
            x++;
            y++;
            if(y == size - 1) state = right;
            if(x == size - 1) state = up;
            break;
        }

    }

    for(int i = 0; i < size; ++i) {
        for(int j = 0; j < size; ++j) {
            std::cout << a[i][j] << " ";
        }
        std::cout << std::endl;
    }
    
}
→ Ссылка