Matrix or Grid or 2D Array Complete Tutorial (original) (raw)

Last Updated : 10 Dec, 2024

**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 #include 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 #include 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:

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 #include using namespace std;

int main() { // Initializing a 2-D vector with values vector<vector> 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> 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 >& 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 > 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");

`

4. Sorting Matrix Data Structure:

We can sort a matrix in two-ways:

**Related Article: