111,093
社区成员




public List<Point> FindNextPoint(List<Point> source, Point point, List<Point> findedPoints)
{
List<Point> result = new List<Point>();
result.Add(point);
findedPoints.Add(point);
List<Point> points = source.FindAll(
delegate (Point i)
{
return (Math.Abs(i.X - point.X) <= 2 && Math.Abs(i.Y - point.Y) <= 2) && !findedPoints.Contains(i);
}
);
result.AddRange(points);
findedPoints.AddRange(points);
for (int i = 0; i < points.Count; i++)
{
List<Point> findPoints = FindNextPoint(source, points[i], findedPoints);
result.AddRange(findedPoints);
}
return result;
}
for (int i = 0; i < p.Count; i++)
{
if (findedPoints.Contains(p[i])) continue;
first = FindNextPoint(p, p[i], findedPoints);
if (first.Count <= 0) continue;
Point[] item = (Point[])first.ToArray().Clone();
areas.Add(item.ToList());
first.Clear();
}
var result = areas.Aggregate((a, b) => a.Union(b).ToList()).ToList();