Вывод прямоугольной матрицы спиралью - C#
Формулировка задачи:
Вводится прямоугольная матрица произвольного размера. Нужно вывести её элементы по спирали по часовой стрелке, начиная с верхнего левого угла.
Код пока такой. Если последние 4 цикла зациклить, то вывод работает для квадратной матрицы, но для прямоугольной нет. Прошу помощи, что исправить в коде, чтобы работало для прямоугольных матриц, и какой цикл использовать для зацикливания последних 4 циклов)
Если моё направление мысли неверно, то направьте, пожалуйста)
using System; namespace prog1 { class Program { static void Main(string[] args) { Console.WriteLine("Введите размерность матрицы"); int n = int.Parse(Console.ReadLine()), m = int.Parse(Console.ReadLine()); int [,] a = new int[n,m]; Console.WriteLine("Введите матрицу строками через Enter"); string[] s; for (int i = 0; i < n; i++) { s = Console.ReadLine().Split(); for (int j = 0; j < m; j++) a[i,j]=int.Parse(s[j]); } int k1 = 0, k2 = 1, k3 = 2; for (int j = k1; j < n - k1; j++) { Console.Write(a[k1,j] + " "); } for (int j = k2; j < m - k1; j++) { Console.Write(a[j,m - k2] + " "); } for (int j = n - k3; j > k1; j--) { Console.Write(a[n - k2,j] + " "); } for (int j = m - k3; j > k1; j--) { Console.Write(a[j,k1] + " "); } k1++; k2++; k3++; Console.ReadKey(); } } }
Решение задачи: «Вывод прямоугольной матрицы спиралью»
textual
Листинг программы
static int[] ReadAsSpiral(int[,] matrix) { int width = matrix.GetLength(1); int height = matrix.GetLength(0); var array = new int[width * height]; int index = 0; int minX = 0; int maxX = width - 1; int minY = 0; int maxY = height - 1; while (true) { if (maxX - minX < 0) break; for (int i = minX; i <= maxX; i++) array[index++] = matrix[minY, i]; minY++; if (maxY - minY < 0) break; for (int i = minY; i <= maxY; i++) array[index++] = matrix[i, maxX]; maxX--; if (maxX - minX < 0) break; for (int i = maxX; i >= minX; i--) array[index++] = matrix[maxY, i]; maxY--; if (maxY - minY < 0) break; for (int i = maxY; i >= minY; i--) array[index++] = matrix[i, minX]; minX++; } return array; } static void Main() { int[,] matrix = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11,12,13,14,15} }; Console.WriteLine(string.Join(" ", ReadAsSpiral(matrix))); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д