【问题标题】:Find closest value in a 2d grid c#在 2d 网格 c# 中查找最接近的值
【发布时间】:2016-03-03 12:13:13
【问题描述】:

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

List<List<int> Map;

地图是一个 25x25 的网格(开始时)并填充了以下值:

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

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

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

谢谢:)

【问题讨论】:

  • 看看距离公式->cs.selu.edu/~rbyrd/math/distance
  • 问题是我不知道其他位置的位置。我需要先在网格中搜索最近的位置。我可以在网格中的每个“0”上使用这个距离公式,但我认为这不是最有效的方法。

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


【解决方案1】:

在记事本上写了这个,所以我没有测试过,但你应该知道。 基本上获取所有未探索的地方并按与当前的距离进行排序并获取列表中的第一个值。 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2019-06-01
    • 2017-01-23
    相关资源
    最近更新 更多