How to generate an n x n matrix filled with elements from 1 to N^2 in spiral order in Scala

1 Answer

0 votes
object SpiralMatrixGenerator {

  def generateSpiralMatrix(n: Int): Array[Array[Int]] = {
    val matrix = Array.ofDim[Int](n, n)
    var top = 0
    var bottom = n - 1
    var left = 0
    var right = n - 1
    var num = 1

    while (top <= bottom && left <= right) {
      // Fill top row
      for (i <- left to right) {
        matrix(top)(i) = num
        num += 1
      }
      top += 1

      // Fill right column
      for (i <- top to bottom) {
        matrix(i)(right) = num
        num += 1
      }
      right -= 1

      // Fill bottom row
      if (top <= bottom) {
        for (i <- right to left by -1) {
          matrix(bottom)(i) = num
          num += 1
        }
        bottom -= 1
      }

      // Fill left column
      if (left <= right) {
        for (i <- bottom to top by -1) {
          matrix(i)(left) = num
          num += 1
        }
        left += 1
      }
    }

    matrix
  }

  def main(args: Array[String]): Unit = {
    val n = 3
    val matrix = generateSpiralMatrix(n)

    for (row <- matrix) {
      println(row.mkString(" "))
    }
  }
}


 
/*
run:

1 2 3
8 9 4
7 6 5

*/

 



answered Jun 25, 2025 by avibootz
...