我创建了一个用于模拟机器人应用程序的c#控制台应用程序。 我已经为机器人创建了一个2D网格来移动:
List<List<int> Map;
地图是25x25网格(开头)并填充以下值:
0 = Unexplored space,
1 = Explored space,
2 = Wall,
3 = Obstacle,
9 = Robot
机器人从位置(12,12)开始。 我希望能够在此网格中搜索最近的未探测空间并返回该位置,以便我可以将该位置和机器人定位到A *搜索算法进行规划。
在地图中搜索所述值的最有效方法是什么?
谢谢:)
答案 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();
}