
程序代码:
/****************************
穷举所有的全E方形并得出最大边长
****************************/
#include <stdio.h>
#define N 10
char ef[N][N]={
    {'F','E','E','E','E','E','E','E','E','F'},
    {'E','F','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'E','E','E','E','E','E','E','E','E','E'},
    {'F','E','E','E','E','E','E','E','E','F'}
};
//判断以ef[m][n]为左上角,边长为width的方形是否为全E
int fun(int m,int n,int width)
{
    int i,j;
    for(i=m;i<m+width;++i)
    {
        for(j=n;j<n+width;++j)
        {
            if(ef[i][j]=='F')  return 0;
        }
    }
    return 1;
}
//得到以ef[m][n]为左上角的最大全E方形长度
int point_Search(int m,int n)
{
    if(ef[m][n]=='F')  return 0;
    int max=0;
    int i;
    for(i=2;m+i<=N;++i)
    {
        if(fun(m,n,i)==0)  break;
    }
    max=i-1;
    if(max==1)  return 0;
    else return max;
}
int main()
{
    int i=0,j=0,max=0,tmp=0;
    //以左上角顶点的方式,穷举所有所有的方形,略过最后一行和最后一列
    for(;i<N-1;++i)
    {
        for(;j<N-1;++j)
        {
            tmp=point_Search(i,j);
            if(tmp>max)  max=tmp;
        }
    }
    printf("%d\n",max);
    return 0;
}