字符矩阵问题描述,输入一个m行n列字符矩阵

字符矩阵(counts)问题描述:输入一个 m 行 n 列的字符矩阵,全部由 ABCDE 组成,统计其中四个角由相同字符组成的矩形的个数。这里的矩形要求至少 2 行、2 列。输入格式:第一行为正整数 t(≤5),表示测试数据组数;每组数据中,第一行为正整数 m 和 n(0<m,n≤300),表示字符矩阵的大小,接下来为一个 m 行 n 列的字符矩阵。数据中保证只出现字母 ABCDE。输出格式:对于每组数据,输出一个正整数表示符合条件的矩形的个数。

#include <iostream>
using namespace std;
int main()
{
    int t;
    int m, n;
    for (int i = 0; i < t; i++)
    {
        cin >> m >> n;
        char a[m][n];
        {
            for (int j = 0; j < m; j++)
            {
                for (int k = 0; k < n; k++)
                {
                    cin >> a[j][k];
                }
            }
        }
        int cnt = 0;
        int min = m > n ? n : m; 
        for (int j = 0; j < m - min; j++)
        {
            for (int k = 0; k < n - min; k++)
            {
                for (int l = 1; l <= min; l++)
                {
                    if (a[j][k] == a[j + l][k] && a[j][k] == a[j][k + l] && a[j][k] == a[j + i][k + i])
                        cnt++;
                }
            }
        }
        cout << cnt << endl;
    }
    return 0;
}

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;


//统计m*n行矩阵中,row*col矩阵符合条件的矩形个数
int calsmall(char a[][301], int m, int n, int row, int col)
{
    int cnt = 0;
    for (int i = 0; i < m - row; i++)
    {
        for (int j = 0; j < n - col; j++)
        {
            if (a[i][j] == a[i + row-1][j] && a[i][j] == a[i][j + col-1] && a[i][j] == a[i + row-1][j + col-1])
                cnt++;
        }
    }
    return cnt;
}

//统计m*n行矩阵中符合条件的矩形个数
int cal(char a[][301], int m, int n)
{
    int cnt = 0;
    for (int row = 2; row <= m; row++) //row行
    {
        for (int col = 2; col <= n; col++) //col列
        {
            cnt += calsmall(a, m, n, row, col);
        }
    }
    return cnt;
}


int main()
{
    int t, m, n;
    char a[301][301] = { 0 };
    cin >> t;
    for (int i = 0; i < t; i++) //t组数据
    {
        cin >> m >> n; //输入行和列数
        for (int j = 0; j < m; j++)
            cin >> a[j]; //输入字符矩阵
        
        cout << cal(a, m, n) << endl;
    }

    return 0;
}


#include <iostream>
#include <vector>

using namespace std;

int countRectangles(vector<vector<char>>& matrix, int m, int n) {
    int count = 0;
    for (int i = 0; i < m - 1; i++) {
        for (int j = 0; j < n - 1; j++) {
            if (matrix[i][j] == matrix[i][j+1] && matrix[i][j] == matrix[i+1][j] && matrix[i][j] == matrix[i+1][j+1]) {
                count++;
            }
        }
    }
    return count;
}

int main() {
    int t;
    cin >> t;
    
    while (t--) {
        int m, n;
        cin >> m >> n;
        
        vector<vector<char>> matrix(m, vector<char>(n));
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cin >> matrix[i][j];
            }
        }
        
        int result = countRectangles(matrix, m, n);
        cout << result << endl;
    }
    
    return 0;
}

【以下回答由 GPT 生成】

我需要了解如何判断一个矩形是否由相同字符组成。需要知道矩形的起始位置和结束位置,以及如何遍历矩阵。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632