求解一算法有关问题

求解一算法问题!
小弟刚刚毕业,遇一问题而不得解答,望求高人相助,问题如下:

有一个大小M*N的矩阵X(M,N的值均大于等于2),问怎样才能求出包含在该矩阵中的矩阵数有多少?怎样又能求出X中特定大小的矩阵数为多少?(即存在大小为A*B矩阵Y,A<=M,B<=N,求X中包含的Y矩阵数为多少?行向量及列向量不予考虑)

实例:一个3*3的矩阵,其中的包含矩阵数为9,因为其中2*2的矩阵有4个,2*3或3*2的矩阵共有4个,3*3的矩阵有1个,所以一共是9个。对于一定阶数M不等于N的情况,矩阵X中的A*B矩阵和B*A矩阵的数量是不一样的。

望高手能不吝给出算法,此前网上应有类似问题,在下愚钝,未能知晓,特发此贴,待谢鸿恩!

------解决方案--------------------
算法不是很懂。。
不过你帖子最好法在C/C++大板,这个小板不是很好找。
------解决方案--------------------
好像是递归吧!
------解决方案--------------------
C/C++ code

int FindMatrix(int iM, int iN, int iCurM, int iCurN)
{
    return (iM - iCurM + 1) * (iN - iCurN + 1);
}

int _tmain(int argc, _TCHAR* argv[])
{
    int        iM = 3;
    int        iN = 3;

    int        iAllMatrix = 0;
    for (int i = 2; i <= iM; i++)
    {
        for (int j = 2; j <= iN; j++)
        {
            iAllMatrix += FindMatrix(iM, iN, i, j);
        }
    }
    cout << "总矩阵数目: " << iAllMatrix << endl;

    int        iCurM = 2;
    int        iCurN = 2;
    int        iNumMatrix = FindMatrix(iM, iN, iCurM, iCurN);
    cout << "当前矩阵数目: " << iNumMatrix << endl;

    getchar();

        return 0; 
}

------解决方案--------------------
探讨
这是个数学问题:
1、总个数:(M+1)*M/2 * (N+1)N/2 /2;
2、特定矩阵个数:(M-A+1)*(N-B+1)

------解决方案--------------------
探讨
C/C++ code


int FindMatrix(int iM, int iN, int iCurM, int iCurN)
{
return (iM - iCurM + 1) * (iN - iCurN + 1);
}

int _tmain(int argc, _TCHAR* argv[])
{
int iM = 3;
int ……