🔄 Как заполнить матрицу по спирали с помощью Python: пошаговое руководство

Чтобы заполнить матрицу по спирали в Python, вы можете использовать следующий код:


def заполнить_матрицу_по_спирали(n):
    матрица = [[0] * n for _ in range(n)]
    число = 1
    верхняя_граница = 0
    нижняя_граница = n - 1
    левая_граница = 0
    правая_граница = n - 1

    while число <= n * n:
        for i in range(левая_граница, правая_граница + 1):
            матрица[верхняя_граница][i] = число
            число += 1
        верхняя_граница += 1

        for i in range(верхняя_граница, нижняя_граница + 1):
            матрица[i][правая_граница] = число
            число += 1
        правая_граница -= 1

        for i in range(правая_граница, левая_граница - 1, -1):
            матрица[нижняя_граница][i] = число
            число += 1
        нижняя_граница -= 1

        for i in range(нижняя_граница, верхняя_граница - 1, -1):
            матрица[i][левая_граница] = число
            число += 1
        левая_граница += 1

    return матрица

размер_матрицы = int(input("Введите размер матрицы: "))
спиральная_матрица = заполнить_матрицу_по_спирали(размер_матрицы)
print(спиральная_матрица)
    

Этот код создает функцию заполнить_матрицу_по_спирали, которая принимает размер матрицы n и возвращает заполненную по спирали матрицу. Затем код запрашивает у пользователя размер матрицы и вызывает функцию заполнить_матрицу_по_спирали, чтобы заполнить матрицу по спирали. Результат выводится на экран.

Детальный ответ

Как заполнить матрицу по спирали в Python

Заполнение матрицы по спирали в Python - это процесс, в котором элементы матрицы записываются по спирали, начиная с внешнего края и двигаясь внутрь.

Шаги для заполнения матрицы по спирали:

1. Задайте начальные значения для переменных: верхняя граница top, нижняя граница bottom, левая граница left, правая граница right и переменную direction. Начните с направления вправо (значение 0).


top = 0
bottom = n - 1
left = 0
right = n - 1
direction = 0

2. Используйте цикл while для заполнения элементов матрицы. Проверьте условие, что верхняя граница не превышает нижнюю границу и левая граница не превышает правую границу. Это гарантирует заполнение элементов только внутри границ.


while top <= bottom and left <= right:
    # Заполнение элементов при движении вправо
    if direction == 0:
        for i in range(left, right + 1):
            matrix[top][i] = value
            value += 1
        top += 1
    # Заполнение элементов при движении вниз
    elif direction == 1:
        for i in range(top, bottom + 1):
            matrix[i][right] = value
            value += 1
        right -= 1
    # Заполнение элементов при движении влево
    elif direction == 2:
        for i in range(right, left - 1, -1):
            matrix[bottom][i] = value
            value += 1
        bottom -= 1
    # Заполнение элементов при движении вверх
    else:
        for i in range(bottom, top - 1, -1):
            matrix[i][left] = value
            value += 1
        left += 1
        
    direction = (direction + 1) % 4

3. В каждой итерации цикла while выполните заполнение элементов в соответствии с текущим направлением движения. При этом обновляйте соответствующие границы и изменяйте направление движения.

4. Если вы хотите, чтобы матрица имела размеры, отличные от квадратной, замените переменную n в вышеуказанном коде на соответствующие значения для количества строк и столбцов.

Пример


def fill_spiral_matrix(n):
    matrix = [[0] * n for _ in range(n)]
    top = 0
    bottom = n - 1
    left = 0
    right = n - 1
    direction = 0
    value = 1
    
    while top <= bottom and left <= right:
        if direction == 0:
            for i in range(left, right + 1):
                matrix[top][i] = value
                value += 1
            top += 1
        elif direction == 1:
            for i in range(top, bottom + 1):
                matrix[i][right] = value
                value += 1
            right -= 1
        elif direction == 2:
            for i in range(right, left - 1, -1):
                matrix[bottom][i] = value
                value += 1
            bottom -= 1
        else:
            for i in range(bottom, top - 1, -1):
                matrix[i][left] = value
                value += 1
            left += 1
        
        direction = (direction + 1) % 4
    
    return matrix
    
n = int(input("Введите размер матрицы: "))
spiral_matrix = fill_spiral_matrix(n)

for row in spiral_matrix:
    for element in row:
        print(element, end=" ")
    print()

Видео по теме

4.6 Заполнение спиралью 😈😈. "Поколение Python": курс для продвинутых. Курс Stepik

Решение задачи acmp № 196 Спираль

Поколение Python: для продвинутых. Тема 4.6 Матрица по спирали

Похожие статьи:

Что делает import math python? 🔢🐍 Узнайте все о функциональности модуля math в Python!

📝 Как получить текст из файла в Python: простой способ

Что такое insert python? Краткий гид для начинающих

🔄 Как заполнить матрицу по спирали с помощью Python: пошаговое руководство

Как посчитать единицы в Питоне? 🔢🐍

😮 Как ограничить цикл в Python: эффективное решение для вашего кода!

Как разделить лист на две части в Python? 🐍✂️