using System.Collections.Generic;
public class MartixTraversal
public static void Main()
string spiralPrint = Traversal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], 5, 5);
Console.WriteLine(spiralPrint);
static string Traversal(int[] matrix, int rows, int columns)
bool[, ] printed = new bool[rows, columns];
int[,] resultMatrix = new int[rows, columns];
for(int a = 0; a < rows; a++) {
for(int b = 0; b < columns; b++) {
resultMatrix[a, b] = matrix[b + a * columns];
int[] rowsDir = [ 0, 1, 0, -1 ];
int[] columnsDir = [ 1, 0, -1, 0 ];
for (int i = 0; i < rows * columns; i++) {
res += resultMatrix[validRow, validColumn] + " ";
printed[validRow, validColumn] = true;
int candidateRow = validRow + rowsDir[dirIndex];
int candidateColumn = validColumn + columnsDir[dirIndex];
if (candidateRow >= 0 && candidateColumn >= 0 && candidateRow < rows && candidateColumn < columns && !printed[candidateRow, candidateColumn]) {
validColumn = candidateColumn;
dirIndex = (dirIndex + 1) % 4;
validRow += rowsDir[dirIndex];
validColumn += columnsDir[dirIndex];