Как заполнить массив по схеме?
Пытался разработать алгоритмы прохода заполнения по схеме но ничего не выходит, если кто подскажет буду благодарен.

Ответы (1 шт):
И так, у нас есть двухмерный массив a, размером NxM, (N - число строк, M - число столбцов). Мы начинаем заполнять с элемента a[N-1][M-1]. Сначала движемся влево, заполняя элементы a[N-1][M-1]..a[N-1][0]. Затем переходим на элемент вверх и заполняем a[N-2][0]..a[0][0]. Затем переходим на один элемент вправо и заполняем a[0][1]..a[N-2][1], снова переходим на один элемент вправо и заполняем a[N-2][2]..a[N-2][M-1]. И переходим на один элемент вверх. Запишем эти действия кратко, в одну строку:
a[N-1][M-1]..a[N-1][0]; a[N-2][0]..a[0][0]; a[0][1]..a[N-2][1]; a[N-2][2]..a[N-2][M-1].
Далее видно, что эти действия повторяются для остающихся частей массива. Распишу, включив для наглядности первую итерацию:
a[N-1][M-1]..a[N-1][0]; a[N-2][0]..a[0][0]; a[0][1]..a[N-2][1]; a[N-2][2]..a[N-2][M-1].
a[N-3][M-1]..a[N-3][2]; a[N-4][2]..a[0][2]; a[0][3]..a[N-4][3]; a[N-4][4]..a[N-4][M-1].
a[N-5][M-1]..a[N-5][4]; a[N-6][4]..a[0][4]; a[0][5]..a[N-6][5]; a[N-6][6]..a[N-6][M-1].
a[N-7][M-1]..a[N-7][6]; a[N-8][6]..a[0][6]; a[0][7]..a[N-8][7]; a[N-8][8]..a[N-8][M-1].
...
a[N-k-1][M-1]..a[N-k-1][k]; a[N-k-2][k]..a[0][k]; a[0][k+1]..a[N-k-2][k+1]; a[N-k-2][k+2]..a[N-k-2][M-1].
...
Продолжаем до тех пор, пока не заполним все элементы. А это произойдёт тогда, и только тогда, когда при очередном одиночном шаге вправо, либо вверх, соответствующий индекс столбца либо строки выйдет за пределы матрицы. Отсюда алгоритм:
Если N>0 и M>0:
k=0
Пока "истина":
Заполнить a[N-k-1][M-1]..a[N-k-1][k]
Если (N-k-2)<0: выход
Заполнить a[N-k-2][k]..a[0][k]
Если (k+1)>(M-1): выход
Заполнить a[0][k+1]..a[N-k-2][k+1]
Если (k+2)>(M-1): выход
Заполнить a[N-k-2][k+2]..a[N-k-2][M-1]
k = k+2
Если (N-k-1)<0 выход
На C++ переложить думаю не составит труда.
Предупреждение: выше приведённый алгоритм мною составлен "на листке", а значит может содержать ошибки и опечатки (если кто заметит, пусть поправит). Плюс ко всему, его можно оптимизировать.