Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm ma trận con vuông lớn nhất toàn phần tử bằng nhau C++

Mô tả bài toán

Cho ma trận N×N. Tìm kích thước lớn nhất của ma trận con vuông mà tất cả phần tử bằng nhau.

Ví dụ

mat={{1,2,1},{1,2,2},{2,2,2}} → Output: 2 (ma trận con 2×2 góc trên trái hoặc dưới phải).

Giải thuật (Dynamic Programming)

DP[i][j] = kích thước ma trận con vuông lớn nhất kết thúc tại (i,j) toàn giá trị mat[i][j].\nNếu mat[i][j] == mat[i-1][j] == mat[i][j-1] == mat[i-1][j-1]:\n DP[i][j] = min(DP[i-1][j], DP[i][j-1], DP[i-1][j-1]) + 1\nNgược lại: DP[i][j] = 1.\nKết quả = max DP[i][j].

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;
#define N 4
#define M 4

int findmaxSqMatSize(int mat[][M]) {
    int dp[N][M] = {};
    int ans = 0;
    for (int i=0; i

Đầu ra

The maximum square sub-matrix with all equal elements is 2