在二维网格中查找最接近的值c#

问题描述 投票:0回答:1

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

List<List<int> Map;

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

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

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

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

c# multidimensional-array robotics a-star
1个回答
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.