#NOIP2011J1Q28. [NOIP 2011 普及组初赛] 第 28 题

[NOIP 2011 普及组初赛] 第 28 题

(子矩阵) 输入一个n1m1的矩阵a,和n2m2的矩阵b,问a中是否存在子矩阵和b相等。若存在,输出所有子矩阵左上角的坐标;若不存在输出“There is no answer”。

#include <iostream>
using namespace std;

const int SIZE = 50;
int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE];

int main()
{
    int i, j, k1, k2;
    bool good, haveAns;


    cin >> n1 >> m1;
    for(i = 1; i <= n1; i++)
        for(j = 1; j <= m1; j++)
            cin >> a[i][j];
    cin >> n2 >> m2;
    for(i = 1; i <= n2; i++)
        for(j = 1; j <= m2; j++)
            【第1空】;

    haveAns = false;
    for(i = 1; i <= n1 - n2 + 1; i++)
        for(j = 1; j <= 【第2空】; j++)
        {
            【第3空】;
            for(k1 = 1; k1 <= n2; k1++)
                for(k2 = 1; k2 <= 【第4空】; k2++)
                {
                    if(a[i + k1 - 1][j + k2 - 1] != b[k1][k2])
                        good = false;
                }
            if(good)
            {
                cout << i << ' ' << j << endl;
                【第5空】;
            }
        }

    if(!haveAns)
        cout << "There is no answer" << endl;
    return 0;
}

请填写【第2空】。

{{ input(1) }}