■■■■■■■■
■□□□□□■■
■□□□□□□■
■□□□□□□■
■■■■■■■■
■■■
■□■
■■
■
如这样的图形,其中黑色的就是最外圈,然后每个点都有坐标(经纬度)
List<Ipoint> pPoint=new List<Ipoint>();
已经将所有点的坐标都存放在pPoint中了,写一个算法求出最外圈
■□□□□□■■
■□□□□□□■
■□□□□□□■
■■■■■■■■
■■■
■□■
■■
■
如这样的图形,其中黑色的就是最外圈,然后每个点都有坐标(经纬度)
List<Ipoint> pPoint=new List<Ipoint>();
已经将所有点的坐标都存放在pPoint中了,写一个算法求出最外圈
1. 处理第一行,全部输出即可
2. 处理第二行到第N-1行,输出头和尾
3. 处理第N行,全部输出即可在处理中间部分时,每一次可遍历一次LIST,然后找到第I行里的头和尾,输出即可
int Xmin=pPoint.Select(p=>p.x).Min();
int Xmax=pPoint.Select(p=>p.x).Max();
int Ymin=pPoint.Select(p=>p.y).Min();
int Ymax=pPoint.Select(p=>p.y).Max();List<Ipoint> result=new List<Ipoint>();
for(int i=0;i<Xmax-Xmin;i++)
{
for(int j=0;j<Ymax-Ymin;j++)
{
if(pPoint.Contains(new Point(Xmin+i,Ymin+j))
{
if(!(pPoint.Contains(new Point(Xmin+i,Ymin+j)
&&pPoint.Contains(new Point(Xmin+i-1,Ymin+j)
&&pPoint.Contains(new Point(Xmin+i+1,Ymin+j)
&&pPoint.Contains(new Point(Xmin+i,Ymin+j-1)
&&pPoint.Contains(new Point(Xmin+i,Ymin+j+1)))
result.Add(new Point(Xmin+1,Ymin+j))
}
}
}