По большому счету, если представить двумерную матрицу как вложенные прямоугольники, то вам надо просто обойти каждый прямоугольник по контуру.
Например, если матрица 5х4
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
то это просто вложенные пямоугольники 5х4 и 3х2, пример:
xx xx xx xx
xx yy yy xx
xx yy yy xx
xx yy yy xx
xx xx xx xx
далее, зная ширину, высоту и верхний левый угол, мы пройдем сначала внешнмй пямоугольник, потом повторим тот же самый алгоритм для внутреннего
01 02 03 04
14 yy yy 05
13 yy yy 06
12 yy yy 07
11 10 09 08
Внутренний
01 02 03 04
14 15 16 05
13 20 17 06
12 19 18 07
11 10 09 08
Ну теперь дело за малым, построим функцию, которая так проходит по матрице
private void SpiralFill(int[,] array)
{
var total = array.GetLength(0) * array.GetLength(1);
var curr = 1;
int xPos = 0;
int yPos = 0;
int h = array.GetLength(0);
int w = array.GetLength(1);
while (total >= curr)
{
for (int i = 0; i < w; i++)
array[xPos, yPos + i] = curr++;
for (int i = 1; i < h; i++)
array[xPos + i, yPos + w - 1] = curr++;
for (int i = 1; i < w && curr <= total; i++)
array[xPos + h - 1, (yPos + w - 1) - i] = curr++;
for (int i = 1; i < h - 1 && curr <= total; i++)
array[(xPos + h - 1) - i, yPos] = curr++;
xPos++;
yPos++;
h -= 2;
w -= 2;
}
}
Естесственно, мы 2 раза по одним и тем же ячейкам не ходим, потому мы оставновимся, когда пройдем все ячейки матрицы.
Ну, для проверки, накатаем функцию вывода матрицы на печать
private void Print(int[,] array)
{
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
Console.Write($"{array[i, j]:00} ");
Console.WriteLine();
}
}
Ну и проверка
var array = new int[10, 5];
SpiralFill(array);
Print(array);
Console.WriteLine();
array = new int[5, 10];
SpiralFill(array);
Print(array);
Вывод
01 02 03 04 05
26 27 28 29 06
25 44 45 30 07
24 43 46 31 08
23 42 47 32 09
22 41 48 33 10
21 40 49 34 11
20 39 50 35 12
19 38 37 36 13
18 17 16 15 14
01 02 03 04 05 06 07 08 09 10
26 27 28 29 30 31 32 33 34 11
25 44 45 46 47 48 49 50 35 12
24 43 42 41 40 39 38 37 36 13
23 22 21 20 19 18 17 16 15 14