Skip to main content

Spiral traversal of matrix in golang

Go program for Spiral traversal of matrix. Here more information.

package main
import "fmt"
// Go program
// Spiral form of 2d array

func spiral(data[][] int, startRow int, 
    startCol int, endRow int, endCol int, element int) {
    //Left to right
    for i := startCol ; i <= endCol && element > 0 ; i++ {
        element--
        fmt.Print("  ", data[startRow][i])
    }
    //Top to down
    for i := startRow + 1 ; i <= endRow && element > 0 ; i++ {
        element--
        fmt.Print("  ", data[i][endCol])
    }
    //Bottom right to bottom-left
    for i := endCol - 1 ; i >= startCol && element > 0 ; i-- {
        element--
        fmt.Print("  ", data[endRow][i])
    }
    // Bottom left to top
    for i := endRow - 1 ; i > startRow && element > 0 ; i-- {
        element--
        fmt.Print("  ", data[i][startRow])
    }
    if startRow + 1 <= endRow - 1 && element > 0 {
        // Recursive call
        spiral(data, startRow + 1, startCol + 1, 
        	endRow - 1, endCol - 1, element)
    }
}
func main() {

    // 2d matrix
    var matrix = [][] int {
      {1 ,  2 ,  3 ,  4 ,  5 ,  6} , 
      {22 , 23 , 24 , 25 , 26 , 7} , 
      {21 , 36 , 37 , 38 , 27 , 8} , 
      {20 , 35 , 42 , 39 , 28 , 9} , 
      {19 , 34 , 41 , 40 , 29 , 10} , 
      {18 , 33 , 32 , 31 , 30 , 11} , 
      {17 , 16 , 15 , 14 , 13 , 12}}
    var row int = len(matrix)
    var col int = len(matrix[0])
    // Get the number of element
    var element int = row * col
    spiral(matrix, 0, 0, row - 1, col - 1, element)
}

Output

  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  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment