程序代码:
/****************************
穷举所有的全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;
}