在2d网格中找到最接近的值c#

时间:2016-03-03 12:13:14

标签: c# multidimensional-array a-star robot

我创建了一个用于模拟机器人应用程序的c#控制台应用程序。 我已经为机器人创建了一个2D网格来移动:

List<List<int> Map;

地图是25x25网格(开头)并填充以下值:

0 = Unexplored space,
1 = Explored space,
2 = Wall, 
3 = Obstacle, 
9 = Robot

机器人从位置(12,12)开始。 我希望能够在此网格中搜索最近的未探测空间并返回该位置,以便我可以将该位置和机器人定位到A *搜索算法进行规划。

在地图中搜索所述值的最有效方法是什么?

谢谢:)

1 个答案:

答案 0 :(得分:2)

在记事本上写了这个,所以我没有测试过,但你应该知道。 基本上获取所有未探索的位置,并按当前距离对它们进行排序,并获得列表中的第一个值。 CalculateDistance方法应该实现Nikola.Lukovic提到的公式。

public KeyValuePair<int, int> GetClosestUnexploredPosition(List<List<int>> map, int currentX, int currentY)
{
    Dictionary<KeyValuePair<int, int>, double> unexploredPlaces = new Dictionary<KeyValuePair<int, int>, double>();

    foreach (List<int> valueList in map)
    {
        foreach (int value in valueList)
        {
            if (value == 0)
            {
                int x = map.IndexOf(valueList);
                int y = valueList.IndexOf(value));
                if (x != currentX && y != currentY)
                {
                    unexploredPlaces.Add(new KeyValuePair(x, y), CalculateDistance(currentX, currentY, x, y));
                }
            }
        }
    }

    return unexploredPlaces.OrderBy(x => x.Value).FirstOrDefault();
}