Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }