我有一个二维数组arr[i,j]
想找其中离某点周围最近的点,判断是否满足特定条件,不满足的话继续遍历下一圈离他最近的点
就是一直以矩形的形式遍历下去
请问可以怎么实现?

解决方案 »

  1.   


    非常感谢你的回答。。
    我的意思是: arr[i,j] 矩形的意思 就是arr[i-1,j],arr[i+1,j],arr[i,j-1],arr[i,j+1],arr[i+1,j+1],arr[i+1,j-1],arr[i-1,j+1],arr[i-1,j-1]以上是第一圈,如果不满足继续下面一圈16个
      

  2.   


    我只想到用for循环,但是要遍历4条边,不知道怎么控制
    求教下
      

  3.   

    用linq。/*
    0 0 0 1
    0 1 0 0
    0 0 1 0
    0 0 0 0
    */
    class PointData
    {
        public int x { get; set; }
        public int y { get; set; }
        public int data { get; set; }
    }...var data = new List<PointData>
    {
        new PointData() { x = 0, y = 0, data = 0 },
        new PointData() { x = 1, y = 0, data = 0 },
        new PointData() { x = 2, y = 0, data = 0 },
        new PointData() { x = 3, y = 0, data = 1 },
        new PointData() { x = 0, y = 1, data = 0 },
        new PointData() { x = 1, y = 1, data = 1 },
        new PointData() { x = 2, y = 1, data = 0 },
        new PointData() { x = 3, y = 1, data = 0 },
        new PointData() { x = 0, y = 2, data = 0 },
        new PointData() { x = 1, y = 2, data = 0 },
        new PointData() { x = 2, y = 2, data = 1 },
        new PointData() { x = 3, y = 2, data = 0 },
        new PointData() { x = 0, y = 3, data = 0 },
        new PointData() { x = 1, y = 3, data = 0 },
        new PointData() { x = 2, y = 3, data = 0 },
        new PointData() { x = 3, y = 3, data = 0 }
    };
    //寻找距离3,3最近的点
    var result = data.OrderBy(x => (x.x - 3) * (x.x - 3) + (x.y - 3) * (x.y - 3)).Where(x => x.data == 1).First();
    Console.WriteLine("result is {0},{1}.", result.x, result.y);
      

  4.   

    如果允许斜线通路,上面的代码可以修改下var result = data.OrderBy(x => Math.Abs(x.x - 3) > Math.Abs(x.y - 3) ? Math.Abs(x.x - 3) : Math.Abs(x.y - 3)).Where(x => x.data == 1).First();
      

  5.   


    linq是怎么用的呀?没有碰到过,望指教。。
      

  6.   

    图形 BFS 算法 ?