Tutorialspoint.dev

Print a matrix in a spiral form starting from a point

Given a matrix of size n*m, and a point P(c, r). Print the matrix in a spiral form(clockwise) starting from the point P.

Examples :

Input : mat[][] = {{1 2 3},
                   {4 5 6},
                   {7 8 9}}
        Point P = (0, 2)
Output : 3 6 5 2 9 8 7 4 1
The starting point is top left which
is 3.



This problem is mainly an extension of print a matrix in spiral form.

C++

// C++ program to print a matrix in spiral
// form.
#include <iostream>
using namespace std;
  
const int MAX = 100;
  
void printSpiral(int mat[][MAX], int r, int c)
{
  
    int i, a = 0, b = 2;
  
    int low_row = (0 > a) ? 0 : a;
    int low_column = (0 > b) ? 0 : b - 1;
    int high_row = ((a + 1) >= r) ? r - 1 : a + 1;
    int high_column = ((b + 1) >= c) ? c - 1 : b + 1;
  
    while ((low_row > 0 - r && low_column > 0 - c)) {
  
        for (i = low_column + 1; i <= high_column && 
                         i < c && low_row >= 0; ++i)
            cout << mat[low_row][i] << " ";
        low_row -= 1;
  
        for (i = low_row + 2; i <= high_row && i < r && 
                                   high_column < c; ++i)
            cout << mat[i][high_column] << " ";
        high_column += 1;
  
        for (i = high_column - 2; i >= low_column &&
                               i >= 0 && high_row < r; --i)
            cout << mat[high_row][i] << " ";
        high_row += 1;
  
        for (i = high_row - 2; i > low_row && i >= 0 
                                   && low_column >= 0; --i)
            cout << mat[i][low_column] << " ";
        low_column -= 1;
    }
    cout << endl;
}
  
// Driver code
int main()
{
    int mat[][MAX] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    int r = 3, c = 3;
  
    printSpiral(mat, r, c);
}

Java

// Java program to print a
// matrix in spiral form
import java.io.*;
  
class GFG {
   
static void printSpiral(int [][]mat, int r, int c)
{
    int i, a = 0, b = 2;
  
    int low_row = (0 > a) ? 0 : a;
    int low_column = (0 > b) ? 0 : b - 1;
    int high_row = ((a + 1) >= r) ? r - 1 : a + 1;
    int high_column = ((b + 1) >= c) ? c - 1 : b + 1;
  
    while ((low_row > 0 - r && low_column > 0 - c)) 
    {
        for (i = low_column + 1; i <= high_column && 
                         i < c && low_row >= 0; ++i)
            System.out.print (mat[low_row][i] + " ");
        low_row -= 1;
  
        for (i = low_row + 2; i <= high_row && i < r && 
                                  high_column < c; ++i)
            System.out.print(mat[i][high_column] + " ");
        high_column += 1;
  
        for (i = high_column - 2; i >= low_column &&
                        i >= 0 && high_row < r; --i)
            System.out.print(mat[high_row][i] + " ");
        high_row += 1;
  
        for (i = high_row - 2; i > low_row && i >= 0
                            && low_column >= 0; --i)
            System.out.print(mat[i][low_column] +" ");
        low_column -= 1;
    }
    System.out.println();
}
  
// Driver code
    static public void main (String[] args)
    {
        int [][]mat = {{1, 2, 3},
                       {4, 5, 6}, 
                       {7, 8, 9}};
        int r = 3, c = 3;
  
        // Function calling
        printSpiral(mat, r, c);
    }
}
  
// This code is contributed by vt_m.

Python 3

# Python3 program to print a matrix
# in spiral form.
MAX = 100

def printSpiral(mat, r, c):

a = 0
b = 2

low_row = 0 if (0 > a) else a
low_column = 0 if (0 > b) else b – 1
high_row = r-1 if ((a + 1) >= r) else a + 1
high_column = c-1 if ((b + 1) >= c) else b + 1

while ((low_row > 0 – r and low_column > 0 – c)):

i = low_column + 1
while (i <= high_column and i < c and low_row >= 0):
print( mat[low_row][i], end = ” “)
i += 1
low_row -= 1

i = low_row + 2
while (i <= high_row and i < r and high_column < c): print(mat[i][high_column], end = " ") i += 1 high_column += 1 i = high_column - 2 while (i >= low_column and
i >= 0 and high_row < r): print(mat[high_row][i], end = " ") i -= 1 high_row += 1 i = high_row - 2 while (i > low_row and
i >= 0 and low_column >= 0):
print(mat[i][low_column], end = ” “)
i -= 1
low_column -= 1

print()

# Driver code
if __name__ == “__main__”:

mat = [[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]]
r = 3
c = 3
printSpiral(mat, r, c)

# This code is contributed by ita_c

C#

// C# program to print a 
// matrix in spiral form
using System;
  
class GFG {
  
static void printSpiral(int [,]mat, int r, int c)
{
    int i, a = 0, b = 2;
  
    int low_row = (0 > a) ? 0 : a;
    int low_column = (0 > b) ? 0 : b - 1;
    int high_row = ((a + 1) >= r) ? r - 1 : a + 1;
    int high_column = ((b + 1) >= c) ? c - 1 : b + 1;
  
    while ((low_row > 0 - r && low_column > 0 - c))
    {
        for (i = low_column + 1; i <= high_column && 
                         i < c && low_row >= 0; ++i)
            Console.Write (mat[low_row,i] + " ");
        low_row -= 1;
  
        for (i = low_row + 2; i <= high_row && i < r && 
                                  high_column < c; ++i)
            Console.Write(mat[i,high_column] + " ");
        high_column += 1;
  
        for (i = high_column - 2; i >= low_column &&
                        i >= 0 && high_row < r; --i)
            Console.Write(mat[high_row,i] + " ");
        high_row += 1;
  
        for (i = high_row - 2; i > low_row && i >= 0 
                            && low_column >= 0; --i)
            Console.Write(mat[i,low_column] +" ");
        low_column -= 1;
    }
    Console.WriteLine();
}
  
    // Driver code
    static public void Main ()
    {
        int [,]mat = {{1, 2, 3},
                      {4, 5, 6}, 
                      {7, 8, 9}};
        int r = 3, c = 3;
  
        // Function calling
        printSpiral(mat, r, c);
    }
}
  
// This code is contributed by vt_m.

PHP

<?php
// PHP program to print a 
// matrix in spiral form.
$MAX = 100;
  
function printSpiral($mat
                     $r, $c)
{
    global $MAX;
    $i; $a = 0; $b = 2;
  
    $low_row = (0 > $a) ? 
                0 : $a;
    $low_column = (0 > $b) ? 
                   0 : $b - 1;
    $high_row = (($a + 1) >= $r) ? 
                  $r - 1 : $a + 1;
    $high_column = (($b + 1) >= $c) ? 
                     $c - 1 : $b + 1;
  
    while (($low_row > 0 - $r && 
            $low_column > 0 - $c))
    {
  
        for ($i = $low_column + 1; 
             $i <= $high_column && 
             $i < $c && $low_row >= 0; ++$i)
            echo $mat[$low_row][$i], " ";
        $low_row -= 1;
  
        for ($i = $low_row + 2; 
             $i <= $high_row && $i < $r && 
             $high_column < $c; ++$i)
        echo $mat[$i][$high_column] , " ";
        $high_column += 1;
  
        for ($i = $high_column - 2; 
             $i >= $low_column &&
             $i >= 0 && $high_row < $r; --$i)
            echo $mat[$high_row][$i] , " ";
        $high_row += 1;
  
        for ($i = $high_row - 2; 
             $i > $low_row && $i >= 0 && 
             $low_column >= 0; --$i)
            echo $mat[$i][$low_column] , " ";
        $low_column -= 1;
    }
    echo " ";
}
  
// Driver code
$mat = array(array(1, 2, 3),
             array(4, 5, 6),
             array(7, 8, 9));
$r = 3; $c = 3;
  
printSpiral($mat, $r, $c);
  
// This code is contributed by aj_36
?>


Output:

3 6 5 2 9 8 7 4 1

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter