■■■■■■■■
  ■□□□□□■■
  ■□□□□□□■
  ■□□□□□□■
  ■■■■■■■■
                ■■■
                ■□■
                ■■
                ■
如这样的图形,其中黑色的就是最外圈,然后每个点都有坐标(经纬度)
List<Ipoint> pPoint=new List<Ipoint>();
已经将所有点的坐标都存放在pPoint中了,写一个算法求出最外圈

解决方案 »

  1.   

    所谓迭代,也不一定先这样。先写为递归,用几行代码做出来就行了。用Linq 也就是一条简单的查询语句,并且Linq会自动将递归的算法编译为使用迭代器的方法来执行。
      

  2.   

    类似走迷宫的问题,用DFS就可以了,这么小规模的数据,用递归做DFS就行。
      

  3.   

    嗯,使用Linq编程属于典型的“三分钟、一条语句”规模的任务。
      

  4.   

    这个问题我十分钟没有写出算法来,我只能说说我的个人思路
    1. 处理第一行,全部输出即可
    2. 处理第二行到第N-1行,输出头和尾
    3. 处理第N行,全部输出即可在处理中间部分时,每一次可遍历一次LIST,然后找到第I行里的头和尾,输出即可
      

  5.   

    List<Ipoint> pPoint=new List<Ipoint>();
    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))
          }
       }
    }