Program Overview

This program finds the size of the largest square that can be formed using only 1s in a given binary matrix. It utilizes dynamic programming to efficiently compute the largest square at each position in the matrix.

Program Structure

  • Input: A binary matrix represented as a 2D array.
  • Dynamic Programming Table: A 2D array to store the size of the largest square ending at each cell.
  • Output: The size of the largest square containing only 1s.

C Program


#include 

#define MAX 100

// Function to find the largest square of 1s in a binary matrix
int findLargestSquare(int matrix[MAX][MAX], int rows, int cols) {
    int dp[MAX][MAX]; // Dynamic programming table
    int maxSquareSize = 0; // Variable to store the maximum square size

    // Initialize the dynamic programming table
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            dp[i][j] = 0; // Set all entries to 0
        }
    }

    // Fill the dp table
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (matrix[i][j] == 1) { // Check if the cell is 1
                // If we're in the first row or column, just copy the value
                if (i == 0 || j == 0) {
                    dp[i][j] = 1;
                } else {
                    // Take the minimum of the top, left, and top-left diagonal values and add 1
                    dp[i][j] = (dp[i-1][j] < dp[i][j-1] ? (dp[i-1][j] < dp[i-1][j-1] ? dp[i-1][j] : dp[i-1][j-1]) : (dp[i][j-1] < dp[i-1][j-1] ? dp[i][j-1] : dp[i-1][j-1])) + 1; } // Update the maximum square size found if (dp[i][j] > maxSquareSize) {
                    maxSquareSize = dp[i][j];
                }
            }
        }
    }

    return maxSquareSize; // Return the size of the largest square
}

// Main function
int main() {
    int matrix[MAX][MAX];
    int rows, cols;

    // Input the dimensions of the matrix
    printf("Enter the number of rows and columns: ");
    scanf("%d %d", &rows, &cols);

    // Input the binary matrix
    printf("Enter the binary matrix (%d rows and %d columns):\n", rows, cols);
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    // Find the largest square of 1s
    int largestSquare = findLargestSquare(matrix, rows, cols);
    printf("The size of the largest square containing only 1s is: %d\n", largestSquare);

    return 0;
}

Explanation of the Code

The program starts by defining a constant MAX for the maximum dimensions of the matrix. The function findLargestSquare performs the core logic:

  • A dynamic programming table dp is created to store the size of the largest square ending at each cell.
  • The program iterates through each cell in the input matrix. If the cell contains a 1, it checks the top, left, and top-left diagonal cells to determine the size of the largest square that can be formed up to that cell.
  • After filling the dp table, the largest square size is returned.

Usage

To use the program:

  1. Compile the program using a C compiler (e.g., gcc).
  2. Run the executable and input the dimensions of the binary matrix.
  3. Input the binary matrix values (0s and 1s).
  4. The program will output the size of the largest square containing only 1s.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

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

error

Enjoy this blog? Please spread the word :)