Вывод прямоугольной матрицы спиралью - 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)));
}