Пример #1
0
        public JourneysServiceTests()
        {
            this.journeysRepository = new Mock <IJourneysRespository>();
            this.service            = new JourneysService(journeysRepository.Object);
            var vertices = new List <string>()
            {
                "Basingstoke", "Reading", "Farnborough", "Clapham Junction", "London Victoria", "London Paddington"
            };
            var edges = new List <Tuple <string, string, int> >()
            {
                Tuple.Create("Reading", "Basingstoke", 18),
                Tuple.Create("Basingstone", "Reading", 18),
                Tuple.Create("Farnborough", "Basingstoke", 16),
                Tuple.Create("Basingstoke", "Farnborough", 16),
                Tuple.Create("Farnborough", "Reading", 25),
                Tuple.Create("Reading", "Farnborough", 25),
                Tuple.Create("Clapham Junction", "Basingstoke", 37),
                Tuple.Create("Basingstoke", "Clapham Junction", 37),
                Tuple.Create("London Victoria", "Clapham Junction", 6),
                Tuple.Create("Clapham Junction", "London Victoria", 6),
                Tuple.Create("London Paddington", "Reading", 34),
                Tuple.Create("Reading", "London Paddington", 34),
                Tuple.Create("London Victoria", "London Paddington", 32),
                Tuple.Create("London Paddington", "London Victoria", 32)
            };

            this.mockedGraph = new RailwayConnectionsGraph(vertices, edges);
        }
Пример #2
0
        private IEnumerable <(string, int)> CalculatePath(RailwayConnectionsGraph graph, string start, string end)
        {
            var previous = new Dictionary <string, (string, int)>();

            var queue = new Queue <(string, int)>();

            queue.Enqueue((start, 0));

            while (queue.Count > 0)
            {
                var vertex = queue.Dequeue();
                foreach (var neighbor in graph.AdjacencyList[vertex.Item1])
                {
                    if (previous.ContainsKey(neighbor.Item1))
                    {
                        continue;
                    }

                    previous[neighbor.Item1] = (vertex.Item1, neighbor.Item2);
                    queue.Enqueue(neighbor);
                }
            }

            var path = new List <(string, int)> {
            };

            var current = (end, 0);

            while (!current.Item1.Equals(start))
            {
                path.Add(current);
                current = previous[current.Item1];
            }
            ;

            path.Add((start, current.Item2));
            path.Reverse();

            return(path);
        }