判断一个矩阵是否是另一个矩阵的子矩阵

【问题描述】

从标准输入中输入一个N(N<=9)阶矩阵和一个M(M<=N)阶矩阵,判断矩阵M是否是N的子矩阵,若是则输出M在N中的起始位置,若不是则输出-1。若矩阵M能与N中某一区域完全相等,则称M是N的子矩阵。

【输入形式】

从标准输入读取矩阵。

第一行只有一个整数N,代表第一个矩阵的阶数。后续有N行输入,每行有N个以若干空格分隔的整数,代表该矩阵在该行上的所有元素。

输入完N阶矩阵后,再在下一行输入一个整数M,代表第二个矩阵的阶数。后续有M行输入,每行有M个以若干空格分隔的整数,代表该矩阵在该行上的所有元素。

【输出形式】

输出M在N中的起始位置,即N中的第几行第几列,两个数字用逗号“,”分隔(从第1行第1列开始计数,即:矩阵第一个元素的位置为:1,1。

若N有多个子矩阵与M矩阵完全相同,则输出首先找到的起始位置,即行最小的位置,若行相同,则为列最小的位置。

若M不是N的子矩阵,则输出-1。

【样例输入】

6

3 9 15 25 -9 0

36 102 2 5 67 89

8 12 58 6 53 456

67 7 895 -12 65 -83

-56 812 25 0 72 61

4 71 69 -4 341 970

3

6 53 456

-12 65 -83

0 72 61

【样例输出】

3,4

【样例说明】

第一个矩阵为6阶矩阵,第二个矩阵为3阶矩阵,第二个矩阵与第一个矩阵的某个子矩阵(起始位置为第3行第4列的3阶矩阵)完全相同,故输出3,4,行列数用逗号隔开。

【评分标准】

该题要求输出M矩阵在N矩阵的起始位置。上传C语言文件名为example2b.c。

#include
#include
int main()
{
    int a [10][10], b [10][10];
    int i,j, x, y, n, m, k =0, c, d,i ;
    scanf ("% d ",& n );
    for ( i =0; i < n ; i ++)
        for (j=0; j < n ; j ++)
            scanf ("% d ",& a [i][j]);
    scanf ("% d ",& m );
    for ( x =0; x < m ; x++)
    {
        for ( y =0; y < m ; y ++)
            scanf ("% d ",& b [ x ][ y]);
        }
    for ( i =0; i < n ; i ++)
    {
        for ( j =0; j < n ; j ++)
            if ( a[][]==b[0][0])
                c = i, d = j ;
            }
    for ( i =c, x =0; i < c + m, x < m ; x++, i ++)
    {
        for ( j = d, y =0; j < d + m, y < m ; y ++, j ++)
            if ( a [ i ][ j ]!= b [ xl [ yl )
                                    k ++;
                                    if ( k ==0)
                                    printf ("% d ,% d ", c +1, d +1);
                                    ++;

                                    if (k==0)
                                    printf ("-1");
        }
        return 0;
}

代码运行出错