题意:
有n行n列(2<=n<=9)的小黑点,还有m条线段连接其中的一些黑点。统计这些线段连成了多少正方形。(每种边长分别统计)。
行从上到下编号为1~n,列从左到右编号为1~n。边用H i j和V i j表示,分别代表(i,j)-(i,j+1)和(i,j)-(i+1,j)。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char s;
int n, m,x,y;
int H[10][10], V[10][10]; //存储表格上的竖线和横线
memset(H, 0, sizeof(H)); //初始化为0
memset(V, 0, sizeof(V));
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> s >> x >> y;
if (s == 'H')
H[x][y] = 1;
else
V[x][y] = 1;
}
int sum = 0;
for (int l = 1; l <= n; l++)
{
for (int i = 1; i + 1 <= n; i++)
for (int j = 1; j + 1 <= n; j++)
{
int flag = 1;
for (int h = j; h < j + l; h++)
if (!H[i][h] || !H[i + 1][h])
flag = 0;
for (int v = i; v < i + l; v++)
if (!V[v][j] || !V[v][j + 1])
flag = 0;
sum += flag;
}
}
cout << sum;
return 0;
}
没有写的太完整,主要思想就这么多,重在理解。