以下为统计正方形个数的程序,图如下:
1. 统计顶点
设最左下坐标为(0,0),右上为(4,4), 将所有的顶点(vertex)保存起来,
则大正方形四等分边会获得vertice.size()==25个vertice.
而小正方形二等分边会获得vertice.size()==9个vertice.
2. 统计正方形
然后再判断并统计所有顶点可以组成的正方形个数:
可得:
前者可得 sqares.size()==30 个正方形,其中边长4为1个,边长3为4个,边长2为9个,边长1为16个。
后者可得 sqares.size()==5 个正方形,其中边长2为1个,边长1为4个。
则图中的总个数是 30+2*5=40个。
3. 程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
struct Vertex
{
double x;
double y;
};
typedef struct Vertex Vertex;
struct Square
{
int a;
int b;
int c;
int d;
};
typedef struct Square Square;
typedef std::vector<Vertex> vec_vtx;
typedef std::vector<Square> vec_sqr;
typedef std::vector<Square>::iterator vec_sqr_it;
// fill the vertice vector for the sliced Square.
void fill_vertice(vec_vtx &vertice, int seg)
{
int v = 0;
int i,j;
Vertex unit;
for (i=0; i<=seg; i++)
for (j=0; j<=seg; j++)
{
unit.x = i;
unit.y = j;
vertice.push_back(unit);
}
}
void illustrate()
{
// illustrate the graph, * as vertex, --| as bar.
std::string graph;
std::string v_bars1 = "| | __|__ |