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]); } }
// 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); } }