Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Find the element at the specified index of a Spirally Filled Matrix

  • Last Updated : 26 Apr, 2021

Given two integers x and y representing the row and column number in a matrix respectively, the task is to find the integer at the cell (x, y) in the Spirally Filled Matrix.

Explanation: 
The size of the matrix change according to the insertion of elements. 
As the row and columns are filled layer – by – layer, a square matrix will be formed as each row and column are added simultaneously in the following manner: 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

  1. A square matrix of size 1 x 1 is formed having a single element 1.
  2. A square matrix of size 2 x 2 is formed after spiral insertion of elements {2, 3, 4} in order: 
    {{1, 2}, 
    {4, 3}}
  3. A square matrix of size 3 x 3 is formed after spiral insertion of elements {5, 6, 7, 8} in order: 
    {{1, 2, 9}, 
    {4, 3, 8}, 
    {5, 6, 7}} 
     

Below image denotes a 4*4 matrix generated following the above steps: 
 



Examples: 

Input: X = 2, Y = 3 
Output:
Explanation: 
The element at row 2 and column 3 is 8.

Input: X = 5, Y = 4 
Output: 20 
Explanation: The element at row 5 and column 4 is 20.

Approach: 
To solve the problem, the logic behind the given spirally filled matrix needs to be understood. Following are the possible cases that need to be considered:

  • Case 1: If y > x & y is odd 
    The element at (x, y) is equal to y2 – x +1

Illustration: 
y = 3, x = 1 
y2 – x +1 = 9 – 1 + 1 = 9 
Element present at (1, 3) = 9.

  • Case 2: If y > x & y is even 
    The element at (x, y) is equal to (y – 1)2 + x

Illustration: 
y = 4, x = 1 
(y – 1)2 + x = 9 + 1 = 10 
Element present at (1, 4) = 10.

  • Case 3: If x ≥ y & x is even 
    The element at (x, y) is equal to x2 – y +1

Illustration: 
y = 1, x = 4 
x2 – y + 1 = 16 – 1 + 1 = 16 
Element present at (4, 1) = 16.

  • Case 4: If If x ≥ y & x is odd 
    The element at (x, y) is equal to (x – 1)2 + y

Illustration: 
y = 2, x = 3 
(x – 1)2 + y = 4 + 2 = 6 
Element present at (3, 2) = 6.

Hence, in order to solve the problem, we need to evaluate and print the result of the equation corresponding to the condition which the given x and y satisfy.

Below is the implementation of the above approach: 

C++




// C++ Program to find the element
// at given position in spirally
// filled matrix
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the
// element at (x, y)
int SpiralElement(int x, int y)
{
    int r;
 
    // If y is greater
    if (x < y) {
 
        // If y is odd
        if (y % 2 == 1) {
            r = y * y;
            return (r - x + 1);
        }
 
        // If y is even
        else {
            r = (y - 1) * (y - 1);
            return (r + x);
        }
    }
 
    else {
 
        // If x is even
        if (x % 2 == 0) {
            r = x * x;
            return (r - y + 1);
        }
 
        // If x is odd
        else {
            r = (x - 1) * (x - 1);
            return (r + y);
        }
    }
}
 
// Driver Code
int main()
{
 
    int x = 2, y = 3;
    cout << SpiralElement(x, y);
    return 0;
}

Java




// Java program to find the element
// at given position in spirally
// filled matrix
import java.util.*;
 
class GFG{
 
// Function to return the
// element at (x, y)
static int SpiralElement(int x, int y)
{
    int r;
 
    // If y is greater
    if (x < y)
    {
 
        // If y is odd
        if (y % 2 == 1)
        {
            r = y * y;
            return (r - x + 1);
        }
 
        // If y is even
        else
        {
            r = (y - 1) * (y - 1);
            return (r + x);
        }
    }
    else
    {
 
        // If x is even
        if (x % 2 == 0)
        {
            r = x * x;
            return (r - y + 1);
        }
 
        // If x is odd
        else
        {
            r = (x - 1) * (x - 1);
            return (r + y);
        }
    }
}
 
// Driver code
public static void main(String[] args)
{
    int x = 2, y = 3;
     
    System.out.println(SpiralElement(x, y));
}
}
 
// This code is contributed by offbeat

Python3




# Python3 program to find the element
# at given position in spirally
# filled matrix
 
# Function to return the
# element at (x, y)
def SpiralElement(x, y):
     
    r = 0
 
    # If y is greater
    if (x < y):
 
        # If y is odd
        if (y % 2 == 1):
            r = y * y
            return (r - x + 1)
         
        # If y is even
        else:
            r = (y - 1) * (y - 1)
            return (r + x)
             
    else:
 
        # If x is even
        if (x % 2 == 0):
            r = x * x
            return (r - y + 1)
         
        # If x is odd
        else:
            r = (x - 1) * (x - 1)
            return (r + y)
     
# Driver code
if __name__ == '__main__':
     
    x = 2
    y = 3
 
    print(SpiralElement(x, y))
 
# This code is contributed by Amit Katiyar

C#




// C# program to find the element
// at given position in spirally
// filled matrix
using System;
  
class GFG{
     
// Function to return the
// element at (x, y)
static int SpiralElement(int x, int y)
{
    int r;
  
    // If y is greater
    if (x < y)
    {
         
        // If y is odd
        if (y % 2 == 1)
        {
            r = y * y;
            return (r - x + 1);
        }
  
        // If y is even
        else
        {
            r = (y - 1) * (y - 1);
            return (r + x);
        }
    }
    else
    {
  
        // If x is even
        if (x % 2 == 0)
        {
            r = x * x;
            return (r - y + 1);
        }
  
        // If x is odd
        else
        {
            r = (x - 1) * (x - 1);
            return (r + y);
        }
    }
}
 
// Driver code
static public void Main()
{
    int x = 2, y = 3;
     
    Console.WriteLine(SpiralElement(x, y));
}
}
 
// This code is contributed by offbeat

Javascript




<script>
// javascript program to find the element
// at given position in spirally
// filled matrix
 
    // Function to return the
    // element at (x, y)
    function SpiralElement(x , y) {
        var r;
 
        // If y is greater
        if (x < y) {
 
            // If y is odd
            if (y % 2 == 1) {
                r = y * y;
                return (r - x + 1);
            }
 
            // If y is even
            else {
                r = (y - 1) * (y - 1);
                return (r + x);
            }
        } else {
 
            // If x is even
            if (x % 2 == 0) {
                r = x * x;
                return (r - y + 1);
            }
 
            // If x is odd
            else {
                r = (x - 1) * (x - 1);
                return (r + y);
            }
        }
    }
 
    // Driver code
     
        var x = 2, y = 3;
 
        document.write(SpiralElement(x, y));
 
// This code contributed by gauravrajput1
</script>
Output: 
8

 

Time complexity: O(1) 
Auxiliary Space: O(1)
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!