Как заполнить матрицу по спирали
В этой записи я продемонстрирую заполнение квадратной матрицы по спирали на языке Python. Использован Python версии 3.6
#n - размерность матрицы n x n #mat - результирующая матрица #st - текущее значение-счетчик для записи в матрицу #m - коеффициент, используемый для заполнения верхней #матрицы последующих витков, т.к. одномерные матрицы #следующих витков имеют меньше значений n = int(input()) mat = [[0]*n for i in range(n)] st, m = 1, 0 # Заранее присваиваю значение центральному элементу # матрицы mat[n//2][n//2]=n*n for v in range(n//2): #Заполнение верхней горизонтальной матрицы for i in range(n-m): mat[v][i+v] = st st+=1 #i+=1 #Заполнение правой вертикальной матрицы for i in range(v+1, n-v): mat[i][-v-1] = st st+=1 #i+=1 #Заполнение нижней горизонтальной матрицы for i in range(v+1, n-v): mat[-v-1][-i-1] =st st+=1 #i+=1 #Заполнение левой вертикальной матрицы for i in range(v+1, n-(v+1)): mat[-i-1][v]=st st+=1 #i+=1 #v+=1 m+=2 #Вывод результата на экран for i in mat: print(*i)
Коротко объясню, для чего нужна переменная m. Обратите внимание на результирующую матрицу при n = 5:
Начиная со значения 17 мы заполняем новый виток до значения 19. То есть, имеем всего 3 значения: 17, 18, 19.
Для этого и используется коэффициент m, чтобы заново не штудировать все 5 значений.