2016-03-03 64 views
0

我創建了一個用於模擬機器人應用程序的c#控制檯應用程序。 我已經創建了一個二維網格用於機器人走動:在二維網格中查找最接近的值c#

List<List<int> Map; 

地圖被一個25×25網格(開始與)和填充有以下值:

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

機器人開始於位置(12,12)。 我希望能夠在這個網格中搜索最近的未知空間並返回該位置,以便我可以將該位置和機器人位置提供給A *搜索算法進行規劃。

什麼是最有效的方法來通過映射搜索所述值?

謝謝:)

+0

看看距離公式 - > http://cs.selu.edu/~rbyrd/math/distance/ –

+0

的問題是,我不知道其他位置的位置。我需要首先在網格中搜索最近的位置。 我可以在網格中的每個'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(); 
}