public override void Run() { base.Run(); var map = GenerateMap(45, 45); var astar = new Astar(map); var path = astar.GetPathFromTo(map[1, 1], map[39, 31]); firstResult = path.Cost.ToString(); var fiftyLocations = 0; // lol, this is butt ugly but a consequence of astaring it. var secondAstar = new Astar(map); for (var y = 0; y < map.GetLength(0); y++) { for (var x = 0; x < map.GetLength(1); x++) { if (map[y, x].IsOpen) { var p = secondAstar.GetPathFromTo(map[1, 1], map[y, x]); if (p != null && p.Cost <= 50) { fiftyLocations++; } } } } secondResult = fiftyLocations.ToString(); Animate(map, path, astar); }
public override void Run() { base.Run(); MapSquare[,] map = new MapSquare[inputs.Length, inputs[0].Length]; Dictionary <int, int[]> waypoints = new Dictionary <int, int[]>(); int[] startPosition = new int[2]; for (var y = 0; y < inputs.Length; y++) { for (var x = 0; x < inputs[y].Length; x++) { map[y, x] = new MapSquare(x, y, 0, inputs[y][x] != '#'); int pos; if (int.TryParse(inputs[y][x].ToString(), out pos)) { if (pos == 0) { startPosition = new int[2] { x, y }; } waypoints.Add(pos, new int[2] { x, y }); } } } var distances = new Dictionary <int, Dictionary <int, int> >(); foreach (var wp in waypoints) { distances.Add(wp.Key, new Dictionary <int, int>()); } foreach (var wp in waypoints) { foreach (var target in waypoints) { if (wp.Key == target.Key) { continue; } if (!distances[target.Key].ContainsKey(wp.Key)) { var astar = new Astar(map); var path = astar.GetPathFromTo(map[wp.Value[1], wp.Value[0]], map[target.Value[1], target.Value[0]]); distances[wp.Key].Add(target.Key, (int)path.Cost); } else { distances[wp.Key].Add(target.Key, distances[target.Key][wp.Key]); } } } firstResult = Cost(distances, new List <int>(), 0, 0).ToString(); secondResult = Cost(distances, new List <int>(), 0, 0, true).ToString(); }