Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++ - C++ Programming Tutorial
C++ Course / Miscellaneous / Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++

Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++

BLUF: Mastering Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++ is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++

C++ is renowned for its efficiency. Learn how Find The Size Of The Largest + Formed By All Ones In A Binary Matrix In C++ enables low-level control and high-performance computing in the tutorial below.

The pursuit of effective solutions to a range of challenges in computer science and algorithmic puzzle-solving frequently leads us to intriguing enigmas with combinatorial reasoning at their core. One such puzzle involves determining the size of the largest plus sign ('+') present in a binary matrix consisting solely of ones. Imagine a two-dimensional grid of binary values where each cell can be either 0 or 1. Our objective is to identify the most extensive cross-shaped pattern ('+') constructed entirely from ones. This pattern must adhere to specific criteria: its arms must extend both vertically and horizontally, meeting at a central cell. Furthermore, the plus sign's arms should not intersect or extend beyond the boundaries of the matrix.

Example:

Example

0 1 1
1 1 1
0 1 0

Output:

Approach:

One straightforward solution is to identify the highest "+", which involves calculating the maximum count of adjacent 1s in a single direction from a specific point in the matrix that must match for a particular 1 in all four directions. This can be achieved by creating a separate matrix for each direction surrounding the point. Each matrix will keep track of the total consecutive 1s encountered. Then, the maximum value will be determined by selecting the smallest value among all consecutive counts in each of the four directions for every index.

Example 1:

Let's consider a C++ code to determine the dimensions of the largest cross shape made up of only 1's within a provided binary grid.

Example

#include <iostream>
using namespace std;

// Size of the binary square matrix
#define N 5

// Function to find the size of the largest '+'
int findLargestPlus(int mat[N][N]) {
    // Arrays to store maximum consecutive 1's to the left, right, top, and bottom of each cell
    int left[N][N], right[N][N], top[N][N], bottom[N][N];

    // Initialize the arrays
    for (int i = 0; i < N; i++) {
        top[0][i] = mat[0][i];
        bottom[N - 1][i] = mat[N - 1][i];
        left[i][0] = mat[i][0];
        right[i][N - 1] = mat[i][N - 1];
    }

    // Fill the arrays
    for (int i = 0; i < N; i++) {
        for (int j = 1; j < N; j++) {
            if (mat[i][j] == 1)
                left[i][j] = left[i][j - 1] + 1;
            else
                left[i][j] = 0;

            if (mat[j][i] == 1)
                top[j][i] = top[j - 1][i] + 1;
            else
                top[j][i] = 0;

            j = N - 1 - j;

            if (mat[j][i] == 1)
                bottom[j][i] = bottom[j + 1][i] + 1;
            else
                bottom[j][i] = 0;

            if (mat[i][j] == 1)
                right[i][j] = right[i][j + 1] + 1;
            else
                right[i][j] = 0;

            j = N - 1 - j;
        }
    }

    // Find the size of the largest '+'
    int max_size = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            int min_len = left[i][j];
            min_len = min_len < right[i][j] ? min_len : right[i][j];
            min_len = min_len < top[i][j] ? min_len : top[i][j];
            min_len = min_len < bottom[i][j] ? min_len : bottom[i][j];

            if (min_len > max_size)
                max_size = min_len;
        }
    }

    // Calculate the total size of the largest '+'
    if (max_size)
        return 4 * (max_size - 1) + 1;
    return 0;
}

/* Driver function */
int main() {
    // Binary Matrix of size N
    int mat[N][N] = {
        {1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1}
    };

    // Find and print the size of the largest '+'
    cout << "Size of the largest '+' formed by all 1's: " << findLargestPlus(mat) << endl;

    return 0;
}

Output:

Output

Size of the largest '+' formed by all 1's: 9

Explanation:

The purpose of this C++ program is to determine the size of the largest plus symbol ('+') that consists of only ones within a provided binary matrix. The program commences by initializing arrays and recording the maximum consecutive ones to the left, right, above, and below each cell in the matrix. These arrays are populated through an iterative process of traversing the matrix and updating the counts of adjacent ones in each direction. Subsequently, utilizing the central cell and four arms extending (n - 1) units in each direction, the program computes and outputs the size of the largest plus sign. If the output is zero, it signifies that a plus sign cannot be identified, indicating that the maximum size achievable is zero.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience