Пример #1
0
 public void AddEdge(CPHNode n, string name)
 {
     Edges.Add(n);
     StreetNames.Add(name);
 }
Пример #2
0
        public static void Run(string Path)
        {
            Map.Clear();
            var inputStreets = new List <string>();

            for (int i = 0; i < 4; i++)
            {
                if (i < 2)
                {
                    Console.WriteLine("Type in start street " + (i + 1));
                }
                else
                {
                    Console.WriteLine("Type in goal street " + (i - 1));
                }
                inputStreets.Add(Console.ReadLine());
            }
            var StreetInputTable = new List <List <Point> >();

            for (int i = 0; i < 4; i++)
            {
                StreetInputTable.Add(new List <Point>());
            }
            var    file = new System.IO.StreamReader(Path);
            string line;

            while ((line = file.ReadLine()) != null)
            {
                string[] elements   = line.Split(' ');
                string   streetName = elements[2];

                Point[] points = { new Point(int.Parse(elements[0]), int.Parse(elements[1])), new Point(int.Parse(elements[3]), int.Parse(elements[4])) };
                foreach (Point p in points)
                {
                    if (!Map.ContainsKey(p))
                    {
                        Map.Add(p, new CPHNode(p));
                    }
                }
                Map[points[0]].AddEdge(Map[points[1]], streetName);

                for (int i = 0; i < 4; i++)
                {
                    if (streetName.Equals(inputStreets[i]))
                    {
                        if (!StreetInputTable[i].Contains(points[0]))
                        {
                            StreetInputTable[i].Add(points[0]);
                        }
                        if (!StreetInputTable[i].Contains(points[1]))
                        {
                            StreetInputTable[i].Add(points[1]);
                        }
                    }
                }
            }
            CPHNode start = FindIntersection(StreetInputTable[0], StreetInputTable[1]);
            CPHNode goal  = FindIntersection(StreetInputTable[2], StreetInputTable[3]);

            if (start == null)
            {
                Console.WriteLine("Could not find start point."); return;
            }
            if (goal == null)
            {
                Console.WriteLine("Could not find end point."); return;
            }

            var path = AStar.Run(start, goal);

            for (int i = 1; i < path.Count; i++)
            { // Print path
                start = path[i - 1] as CPHNode;
                goal  = path[i] as CPHNode;
                int index = start.Edges.IndexOf(goal);
                Console.WriteLine("From " + start.Point + " go through " + start.StreetNames[index] + " to " + goal.Point);
            }
        }