建立两个数组存储横线和竖线,然后尺寸从1到n-1一步一步搜索就行了。
#include<bits/stdc++.h>
using namespace std;
bool pt[10][10],tv[10][10];
int n,m;
int cobe(int step)
{
int sum=0;
bool flag=true;
for(int i=1; i<=n-step; i++)
{
for(int j=1; j<=n-step; j++)
{
for(int z=0; z<step; z++)
{
if(!tv[i][j+z]||!tv[i+step][j+z]||!pt[j][i+z]||!pt[j+step][i+z])
{
flag=false;
}
}
if(flag)
{
sum++;
}
flag=true;
}
}
return sum;
}
int main()
{
char c;
int a,b,first=1,kase=0;
while(cin>>n)
{
if(!first)
cout<<endl<<"**********************************"<<endl<<endl;
memset(tv,false,sizeof(tv));
memset(pt,false,sizeof(pt));
cin>>m;
for(int i=0; i<m; i++)
{
cin>>c>>a>>b;
if(c=='H')
{
tv[a][b]=true;
}
else if(c=='V')
{
pt[a][b]=true;
}
}
if(first)
{
first=0;
}
cout<<"Problem #"<<++kase<<endl<<endl;
bool ishave=false;
for(int i=1; i<n; i++)
{
if(cobe(i))
{
ishave=true;
cout<<cobe(i)<<" square (s) of size "<<i<<endl;
}
}
if(!ishave)
cout<<"No completed squares can be found."<<endl;
}
}