public void HappyPath_ShortestDistancesReturned()
        {
            //Arrange
            EdgeWeightedDigraph graph = new EdgeWeightedDigraph(9);

            DirectedEdge[] edges = new DirectedEdge[]
            {
                new DirectedEdge(1, 2, 5),
                new DirectedEdge(1, 8, 8),
                new DirectedEdge(1, 5, 9),
                new DirectedEdge(2, 4, 15),
                new DirectedEdge(2, 3, 12),
                new DirectedEdge(2, 8, 4),
                new DirectedEdge(3, 4, 3),
                new DirectedEdge(3, 7, 11),
                new DirectedEdge(4, 7, 9),
                new DirectedEdge(5, 8, 5),
                new DirectedEdge(5, 6, 4),
                new DirectedEdge(5, 7, 20),
                new DirectedEdge(6, 3, 1),
                new DirectedEdge(6, 7, 13),
                new DirectedEdge(8, 3, 7),
                new DirectedEdge(8, 6, 6)
            };
            Dictionary <int, DirectedEdge[]> expectedPaths = new Dictionary <int, DirectedEdge[]>
            {
                { 1, new DirectedEdge[] { } },
                { 2, new DirectedEdge[] { edges[0] } },
                { 3, new DirectedEdge[] { edges[2], edges[10], edges[12] } },
                { 4, new DirectedEdge[] { edges[2], edges[10], edges[12], edges[6] } },
                { 5, new DirectedEdge[] { edges[2] } },
                { 6, new DirectedEdge[] { edges[2], edges[10] } },
                { 7, new DirectedEdge[] { edges[2], edges[10], edges[12], edges[7] } },
                { 8, new DirectedEdge[] { edges[1] } },
            };

            foreach (var edge in edges)
            {
                graph.AddEdge(edge);
            }

            //Act
            ShortestPathDijkstra spd = new ShortestPathDijkstra(graph, 1);

            //Assert
            for (int i = 1; i <= 8; i++)
            {
                DirectedEdge[] pathTo       = spd.PathTo(i).ToArray();
                DirectedEdge[] expectedPath = expectedPaths[i];
                Assert.True(expectedPath.SequenceEqual(pathTo));
            }
        }
        public void HappyPath_ShortestDistancesReturned()
        {
            //Arrange
            Dictionary <int, double> expectedDistances = new Dictionary <int, double>
            {
                { 1, 0.0 },
                { 2, 5.0 },
                { 3, 14.0 },
                { 4, 17.0 },
                { 5, 9.0 },
                { 6, 13.0 },
                { 7, 25.0 },
                { 8, 8.0 },
            };
            EdgeWeightedDigraph graph = new EdgeWeightedDigraph(9);

            DirectedEdge[] edges = new DirectedEdge[]
            {
                new DirectedEdge(1, 2, 5),
                new DirectedEdge(1, 8, 8),
                new DirectedEdge(1, 5, 9),
                new DirectedEdge(2, 4, 15),
                new DirectedEdge(2, 3, 12),
                new DirectedEdge(2, 8, 4),
                new DirectedEdge(3, 4, 3),
                new DirectedEdge(3, 7, 11),
                new DirectedEdge(4, 7, 9),
                new DirectedEdge(5, 8, 5),
                new DirectedEdge(5, 6, 4),
                new DirectedEdge(5, 7, 20),
                new DirectedEdge(6, 3, 1),
                new DirectedEdge(6, 7, 13),
                new DirectedEdge(8, 3, 7),
                new DirectedEdge(8, 6, 6)
            };
            foreach (var edge in edges)
            {
                graph.AddEdge(edge);
            }

            //Act
            ShortestPathDijkstra spd = new ShortestPathDijkstra(graph, 1);

            //Assert
            for (int i = 1; i <= 8; i++)
            {
                var distanceTo = spd.DistTo(i);
                Assert.Equal(distanceTo, expectedDistances[i]);
            }
        }
示例#3
0
 // Start algorytmu najkrótszej ścieżki.
 private void buttonShortestPathRun_Click(object sender, EventArgs e)
 {
     if (graph != null)
     {
         if (radioButtonShortestPathDijkstra.Checked)
         {
             if (!negative)
             {
                 shortestPathDijkstra      = new ShortestPathDijkstra(graph, radioButtonModeList.Checked, inputArray[2]);
                 shortestPathDijkstraClock = new Clock(graph, shortestPathDijkstra);
                 for (int i = 0; i < repeat; i++)
                 {
                     shortestPathDijkstraClock.Start();
                     shortestPathDijkstra = new ShortestPathDijkstra(graph, radioButtonModeList.Checked, inputArray[2]);
                     shortestPathDijkstra.Work();
                     shortestPathDijkstraClock.Stop();
                 }
                 shortestPathDijkstraClock.End();
                 textBoxShortestPathTime.Text = shortestPathDijkstraClock.Average().ToString();
             }
             else
             {
                 MessageBox.Show("Krawędź ujemna! Dijkstra nie może wystartować!", "Błąd",
                                 MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
         }
         else
         {
             shortestPathBellmanFord      = new ShortestPathBellmanFord(graph, radioButtonModeList.Checked, inputArray[2]);
             shortestPathBellmanFordClock = new Clock(graph, shortestPathBellmanFord);
             for (int i = 0; i < repeat; i++)
             {
                 shortestPathBellmanFordClock.Start();
                 shortestPathBellmanFord = new ShortestPathBellmanFord(graph, radioButtonModeList.Checked, inputArray[2]);
                 shortestPathBellmanFord.Work();
                 shortestPathBellmanFordClock.Stop();
             }
             shortestPathBellmanFordClock.End();
             textBoxShortestPathTime.Text = shortestPathBellmanFordClock.Average().ToString();
         }
     }
     else
     {
         MessageBox.Show("Graf nie został stworzony!", "Błąd",
                         MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }