Print Spiral Pattern in C++

Well among all the programming languages C/C++ is considered one of the hardest languages to master. From one aspect it’s quite true that writing up a program is pretty lengthy and complicated in C++ as compared with other famous languages. However, C++ is still popular in the industry, so learning and mastering this language has additional benefits. Well, it’s also likely that you are already familiar with printing patterns. So in today’s article, we will create a program to Print Spiral Pattern in C++. With the help of this program, you will be able to print a spiral pattern of integers. Practising these types of questions also helps to get an upper edge in Competitive Programming.

 

What’s The Approach?

 

Firstly we will CREATE A 2D ARRAY with size n.

 

Next, we will create variables to store the boundary of the array and the size left to print the spiral.

 

Also, we are going to create a char variable to store the movement of the spiral pattern. It is like  ‘r’ for right, ‘l’ for left, ‘d’ for down, and ‘u’ for up.

 

Now we will execute a loop from 1 to n*2 and will fill up the array in a spiral pattern.

 

Also Read: Create A Stack Using Array in c++

 

C++ Program To Print Spiral Pattern

 

Input:

n = 5

 

Output: 

 

1  2  3  4  5  
16 17 18 19 6  
15 24 25 20 7  
14 23 22 21 8  
13 12 11 10 9
#include <iostream>
using namespace std;

void printSpiral(int size)
{

    // Create row and col
    // to traverse rows and columns
    int row = 0, col = 0;

    int boundary = size - 1;
    int sizeLeft = size - 1;
    int flag = 1;

    // Variable to determine the movement
    // r = right, l = left, d = down, u = upper
    char move = 'r';

    // Array for matrix
    int matrix[size][size] = {0};

    for (int i = 1; i < size * size + 1; i++)
    {

        // Assign the value
        matrix[row][col] = i;

        // switch-case to determine the next index
        switch (move)
        {

            // If right, go right
            case 'r':
                col += 1;
                break;
    
            // if left, go left
            case 'l':
                col -= 1;
                break;
    
            // if up, go up
            case 'u':
                row -= 1;
                break;
    
            // if down, go down
            case 'd':
                row += 1;
                break;
        }

        // Check if the matrix
        // has reached array boundary
        if (i == boundary)
        {

            // Add the left size for the next boundary
            boundary += sizeLeft;

            // If 2 rotations has been made,
            // decrease the size left by 1
            if (flag != 2)
            {

                flag = 2;
            }
            else
            {

                flag = 1;
                sizeLeft -= 1;
            }

            // switch-case to rotate the movement
            switch (move)
            {

                // if right, rotate to down
                case 'r':
                    move = 'd';
                    break;
    
                // if down, rotate to left
                case 'd':
                    move = 'l';
                    break;
    
                // if left, rotate to up
                case 'l':
                    move = 'u';
                    break;
    
                // if up, rotate to right
                case 'u':
                    move = 'r';
                    break;
            }
        }
    }

    // Print the matrix
    for (row = 0; row < size; row++)
    {
        for (col = 0; col < size; col++)
        {

            int n = matrix[row][col];
            if(n < 10)
                cout << n << " ";
            else
                cout << n << " ";
        }

        cout << endl;
    }
}

// Driver Code
int main()
{

    // Get the size of size
    int size = 5;

    // Print the Spiral Pattern
    printSpiral(size);
    return 0;
}

 

 

Ethix

I'm a coding geek interested in cyberspace who loves to write and read

Leave a Reply

Your email address will not be published. Required fields are marked *