/// <summary> /// Calculate the Best Route /// </summary> /// <param name="mapPosition"></param> private void CalculateBestRoute(MapPosition mapPosition) { //Add value to Route RouteOption.Add(mapPosition.Value); //Load closer values MapPositionAroundValues mapPositionAroundValues = this.GetAroundValues(mapPosition); //Calculate next position MapPosition nextPosition = this.CalculateNextPosition(mapPositionAroundValues); //Validate next position if (nextPosition.Value > 0) { CalculateBestRoute(nextPosition); } else { RouteOptionList.Add(RouteOption); CompareRoutes(); PrintBestRoute(); } }
/// <summary> /// Calculate next position /// </summary> /// <param name="mapPositionAroundValues"></param> /// <returns></returns> private MapPosition CalculateNextPosition(MapPositionAroundValues mapPositionAroundValues) { int a = mapPositionAroundValues.Leftvalue.Value; int b = mapPositionAroundValues.DownValue.Value; int c = mapPositionAroundValues.RightValue.Value; MapPosition MaxValue = new MapPosition(); string result = ""; if (a < b) { if (b < c) { result = "c"; } else { result = "b"; } } else if (a > b) { if (a < c) { result = "c"; } else { result = "a"; } } switch (result) { case "a": MaxValue = mapPositionAroundValues.Leftvalue; break; case "b": MaxValue = mapPositionAroundValues.DownValue; break; case "c": MaxValue = mapPositionAroundValues.RightValue; break; default: break; } return(MaxValue); }
/// <summary> /// Load closer values /// </summary> /// <param name="rowMaxPosition"></param> /// <returns></returns> private MapPositionAroundValues GetAroundValues(MapPosition rowMaxPosition) { int x = rowMaxPosition.RowPosition; int y = rowMaxPosition.ColumnPosition; MapPositionAroundValues mapPositionAroundValues = new MapPositionAroundValues { Value = rowMaxPosition, UpValue = new MapPosition(x - 1 < 0 ? 0 : Map[(x - 1), y], (x - 1), y), DownValue = new MapPosition(x + 1 > (MapSize - 1) ? 0 : Map[(x + 1), y], (x + 1), y), Leftvalue = new MapPosition(y - 1 < 0 ? 0 : Map[x, (y - 1)], x, (y - 1)), RightValue = new MapPosition(y + 1 > (MapSize - 1) ? 0 : Map[x, (y + 1)], x, (y + 1)) }; return(mapPositionAroundValues); }