Для вирішення цього завдання можна використовувати наступний алгоритм:
- Ініціалізувати чотири змінні: верхню межу, нижню межу, лівий кордон і праву межу, які вказують на межі матриці.
- Ініціалізувати змінні: напрямок (початковий напрямок-вправо) і лічильник (початкове значення-1).
- Запустити цикл, який буде виконуватися, поки значення верхньої межі і лівої межі менше або рівні нижньої і правої межі відповідно.
- Вивести всі елементи верхньої межі (від лівої до правої межі) і збільшити значення верхньої межі.
- Збільшити лічильник.
- Вивести всі елементи правої межі (від верхньої до нижньої межі) і зменшити значення правої межі.
- Збільшити лічильник.
- Вивести всі елементи нижньої межі (від правої до лівої межі) і зменшити значення нижньої межі.
- Збільшити лічильник.
- Вивести всі елементи лівої межі (від нижньої до верхньої межі) і збільшити значення лівої межі.
- Збільшити лічильник.
- Повторювати кроки 4-11, поки не будуть виведені всі елементи масиву.
Таким чином, використовуючи даний алгоритм, можна ефективно вивести масив по спіралі.
Скажімо, у нас є наступний масив:
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
5
7 8 9
1 2 3
5
7 8 9
Таким чином, отримуємо шукану спіральну форму масиву 3x3.
[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]
function printSpiral(matrix) topRow++;for (let i = topRow; i rightColumn--;if (topRow = leftColumn; i--) bottomRow--;>if (leftColumn = topRow; i--) leftColumn++;>>return result;>let matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]];let spiral = printSpiral(matrix);console.log(spiral);
В результаті виконання даного коду в консоль буде виведений масив, що містить елементи вихідного масиву, виведені по спіралі:
[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]
Таким чином, ми успішно вивели масив 4x4 по спіралі, використовуючи дану функцію.
def print_spiral(matrix):row_start = 0row_end = len(matrix) - 1col_start = 0col_end = len(matrix[0]) - 1while row_start
В результаті виконання даного прикладу буде виведена наступна послідовність чисел: 1, 2, 3, 6, 9, 8, 7, 4, 5.