Open In App

Matrix or Grid or 2D Array – Complete Tutorial

Last Updated : 10 Dec, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Matrix or Grid is a two-dimensional array mostly used in mathematical and scientific calculations. It is also considered as an array of arrays, where array at each index has the same size.

Introduction-to-Matrix

Representation of Matrix Data Structure:

As you can see from the below image, the elements are organized in rows and columns. As shown in the image, the cell a[0][0] is the first element of the first row and first column.

Representation-of-Matrix


Declaration of Matrix Data Structure :

Declaration of a Matrix or two-dimensional array is very much similar to that of a one-dimensional array, given as follows.

C++
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    // Defining number of rows and columns in matrix
    int rows = 3, cols = 3;

    // Vector of vectors declaration
    vector<vector<int>> arr(rows, vector<int>(cols));

    return 0;
}
C
#include <stdio.h>

int main() {

    // Defining number of rows and columns in matrix
    int rows = 3, cols = 3;
  
    // Array Declaration
    int arr[rows][cols];
  
    return 0;
}
Java
/*package whatever //do not write package name here */

import java.io.*;

class GFG {
    public static void main(String[] args)
    {
        // Defining number of rows and columns in matrix
        int rows = 3, cols = 3;
      
        // Array Declaration
        int[][] arr
            = new int[rows][cols];
    }
}
Python
# Defining number of rows and columns in matrix
rows = 3
cols = 3

# Declaring a matrix of size 3 X 3, and 
# initializing it with value zero
rows, cols = (3, 3)
arr = [[0]*cols]*rows
print(arr)
C#
using System;

public class GFG {

    static public void Main()
    {
        // Defining number of rows and columns in matrix
        int rows = 3, cols = 3;
      
        // Array Declaration
        int[, ] arr
            = new int[rows, cols];
    }
}
JavaScript
// Defining number of rows and columns in matrix
rows = 3,
cols = 3;

// Declare a 2D array using array constructor
let arr = new Array(3); 

// Python declaration
for (let i = 0; i < arr.length; i++) {
    arr[i] = new Array(3); // Each row has 3 columns
}

Initializing Matrix Data Structure:

In initialization, we assign some initial value to all the cells of the matrix. Below is the implementation to initialize a matrix in different languages:

C++
#include <iostream>
#include <vector>
using namespace std;

int main() {
  
    // Initializing a 2-D vector with values
    vector<vector<int>> arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    
    return 0;
}
C
#include <stdio.h>

int main() {

    // Initializing a 2-D array with values
    int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    return 0;
}
Java
/*package whatever //do not write package name here */

import java.io.*;

class GFG {
    public static void main(String[] args)
    {
        // Initializing a 2-D array with values
        int arr[][]
            = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    }
}
Python
# Initializing a 2-D array with values
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
C#
using System;

public class GFG {

    static public void Main()
    {
        int[, ] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    }
}
JavaScript
// Initializing a 2-D array with values
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

Operations on Matrix Data Structure:

We can perform a variety of operations on the Matrix Data Structure. Some of the most common operations are:

  • Access elements of Matrix
  • Traversal of a Matrix
  • Searching in a Matrix
  • Sorting a Matrix

1. Access elements of Matrix Data Structure:

Like one-dimensional arrays, matrices can be accessed randomly by using their indices to access the individual elements. A cell has two indices, one for its row number, and the other for its column number. We can use arr[i][j] to access the element which is at the ith row and jth column of the matrix.

C++
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    // Initializing a 2-D vector with values
    vector<vector<int>> arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    // Accessing elements of 2-D vector
    cout << "First element of first row: " << arr[0][0] << "\n";
    cout << "Third element of second row: " << arr[1][2] << "\n";
    cout << "Second element of third row: " << arr[2][1] << "\n";

    return 0;
}
C
#include <stdio.h>

int main()
{
    // Initializing a 2-D array with values
    int arr[3][3]
        = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

    // Accessing elements of 2-D array
    printf("First element of first row: %d\n", arr[0][0]);
    printf("Third element of second row: %d\n", arr[1][2]);
    printf("Second element of third row: %d\n", arr[2][1]);
    return 0;
}
Java
/*package whatever //do not write package name here */

import java.io.*;

class GFG {
    public static void main(String[] args)
    {

        // Initializing a 2-D array with values
        int[][] arr
            = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        // Accessing elements of 2-D array
        System.out.println("First element of first row: "
                           + arr[0][0]);
        System.out.println("Third element of second row: "
                           + arr[1][2]);
        System.out.println("Second element of third row: "
                           + arr[2][1]);
    }
}
Python
# Initializing a 2-D array with values
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# Accessing elements of 2-D array
print("First element of first row:", arr[0][0])
print("Third element of second row:", arr[1][2])
print("Second element of third row:", arr[2][1])
C#
using System;

public class GFG {

    static public void Main()
    {

        // Initializing a 2-D array with values
        int[, ] arr
            = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        // Accessing elements of 2-D array
        Console.WriteLine("First element of first row: "
                          + arr[0, 0]);
        Console.WriteLine("Third element of second row: "
                          + arr[1, 2]);
        Console.WriteLine("Second element of third row: "
                          + arr[2, 1]);
    }
}
JavaScript
// Initializing a 2-D array with values
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

// Accessing elements of 2-D array
console.log("First element of first row: " + arr[0][0]);
console.log("Third element of second row: " + arr[1][2]);
console.log("Second element of third row: " + arr[2][1]);

2. Traversal of a Matrix Data Structure:

We can traverse all the elements of a matrix or two-dimensional array by using two for-loops.

C++
#include <bits/stdc++.h>
using namespace std;

int main()
{
    // Initializing a 2-D vector with values
    vector<vector<int>> arr = { { 1, 2, 3, 4 },
                                { 5, 6, 7, 8 },
                                { 9, 10, 11, 12 } };

    // Traversing over all the rows
    for (int i = 0; i < arr.size(); i++) {
      
        // Traversing over all the columns of each row
        for (int j = 0; j < arr[i].size(); j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}
C
#include <stdio.h>

int main()
{

    int arr[3][4] = { { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 },
                      { 9, 10, 11, 12 } };
    // Traversing over all the rows
    for (int i = 0; i < 3; i++) {
        // Traversing over all the columns of each row
        for (int j = 0; j < 4; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Java
/*package whatever //do not write package name here */
import java.io.*;

class GFG {
    public static void main(String[] args)
    {
        int[][] arr = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 } };
        // Traversing over all the rows
        for (int i = 0; i < 3; i++) {
            // Traversing over all the columns of each row
            for (int j = 0; j < 4; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

// This code is contributed by lokesh
Python
# Initializing a 2-D list with values
arr = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]

# Traversing each row
for row in arr:
  
    # Traversing each element
    # in the current row
    for x in row:
        print(x, end=" ")
    print()
C#
using System;

public class GFG {

    static public void Main()
    {
        int[, ] arr = new int[3, 4] { { 1, 2, 3, 4 },
                                      { 5, 6, 7, 8 },
                                      { 9, 10, 11, 12 } };
        // Traversing over all the rows
        for (int i = 0; i < 3; i++) {
            // Traversing over all the columns of each row
            for (int j = 0; j < 4; j++) {
                Console.Write(arr[i, j]);
                Console.Write(" ");
            }
            Console.WriteLine(" ");
        }
    }
}

// This code is contributed by akashish__
JavaScript
// JS code for above approach
let arr = [[1, 2, 3, 4],
           [5, 6, 7, 8],
           [9, 10, 11, 12]];
           
// Traversing over all the rows
for (let i = 0; i < 3; i++) {
let s="";
    // Traversing over all the columns of each row
    for (let j = 0; j < 4; j++) {
        s+=(arr[i][j]+" ");
    }
    console.log(s);
}

// This code is contributed by ishankhandelwals.

Output
1 2 3 4 
5 6 7 8 
9 10 11 12 

3. Searching in a Matrix Data Structure:

We can search an element in a matrix by traversing all the elements of the matrix.

Below is the implementation to search an element in a matrix:

C++
#include <bits/stdc++.h>
using namespace std;

bool searchInMatrix(vector<vector<int> >& arr, int x)
{
    int m = arr.size(), n = arr[0].size();

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (arr[i][j] == x)
                return true;
        }
    }
    return false;
}

// Driver program to test above
int main()
{
    int x = 8;
    vector<vector<int> > arr
        = { { 0, 6, 8, 9, 11 },
            { 20, 22, 28, 29, 31 },
            { 36, 38, 50, 61, 63 },
            { 64, 66, 100, 122, 128 } };

    if (searchInMatrix(arr, x))
        cout << "YES" << endl;
    else
        cout << "NO" << endl;

    return 0;
}
Java
// Java code for the above approach

import java.io.*;

class GFG {

  static boolean searchInMatrix(int[][] arr, int x)
  {
    int m = arr.length, n = arr[0].length;

    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        if (arr[i][j] == x)
          return true;
      }
    }
    return false;
  }

  public static void main(String[] args)
  {
    int x = 8;
    int[][] arr = { { 0, 6, 8, 9, 11 },
                   { 20, 22, 28, 29, 31 },
                   { 36, 38, 50, 61, 63 },
                   { 64, 66, 100, 122, 128 } };

    if (searchInMatrix(arr, x)) {
      System.out.println("YES");
    }
    else {
      System.out.println("NO");
    }
  }
}

// This code is contributed by lokeshmvs21.
Python
# Function to search for an element in a 2-D list
def search_in_matrix(arr, x):
    rows, cols = len(arr), len(arr[0])

    # Traverse each row and column
    for i in range(rows):
        for j in range(cols):
            if arr[i][j] == x:
                return True
    return False

# Driver code to test the function
x = 8
arr = [
    [0, 6, 8, 9, 11],
    [20, 22, 28, 29, 31],
    [36, 38, 50, 61, 63],
    [64, 66, 100, 122, 128]
]

if search_in_matrix(arr, x):
    print("YES")
else:
    print("NO")
C#
// C# code for the above approach

using System;

public class GFG {
    static bool searchInMatrix(int[,] arr, int x) {
        int m = arr.GetLength(0), n = arr.GetLength(1);

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (arr[i, j] == x)
                    return true;
            }
        }
        return false;
    }

    public static void Main(string[] args) {
        int x = 8;
        int[,] arr = { { 0, 6, 8, 9, 11 },
            { 20, 22, 28, 29, 31 },
            { 36, 38, 50, 61, 63 },
            { 64, 66, 100, 122, 128 }
        };

        if (searchInMatrix(arr, x)) {
            Console.WriteLine("YES");
        } else {
            Console.WriteLine("NO");
        }
    }
}
JavaScript
// JavaScript code for the above approach

function searchInMatrix(arr, x)
{
    let m = arr.length, n = arr[0].length;

    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (arr[i][j] == x)
                return true;
        }
    }
    return false;
}

// Driver program to test above
let x = 8;
let arr = [
    [ 0, 6, 8, 9, 11 ],
    [ 20, 22, 28, 29, 31 ],
    [ 36, 38, 50, 61, 63 ],
    [ 64, 66, 100, 122, 128 ]
];
if (searchInMatrix(arr, x))
    console.log("YES");
else
    console.log("NO");

Output
YES

4. Sorting Matrix Data Structure:

We can sort a matrix in two-ways:

Related Article:



Next Article
Article Tags :
Practice Tags :

Similar Reads