public bool FindAllTheShortestPathes() { AuxiliaryGraph.AddNode(new Node(AuxiliaryGraph.NumberOfNodes, "Temporary")); for (int Index = 0; Index < AuxiliaryGraph.NumberOfNodes - 1; Index++) { AuxiliaryGraph.AddTwoWayEdge(new Edge(0, AuxiliaryGraph.SetOfNodes[AuxiliaryGraph.NumberOfNodes - 1], AuxiliaryGraph.SetOfNodes[Index])); } BellmanFordPathSearch = new BellmanFordAlgorithm(AuxiliaryGraph); if (BellmanFordPathSearch.FindTheShortestPathes(AuxiliaryGraph.SetOfNodes[AuxiliaryGraph.NumberOfNodes - 1])) { for (int FirstIndex = 0; FirstIndex < InnerGraph.NumberOfNodes; FirstIndex++) { DijkstraPathSearch = new DijkstraAlgorithm(InnerGraph); DijkstraPathSearch.FindTheShortestPathes(InnerGraph.SetOfNodes[FirstIndex]); for (int SecondIndex = 0; SecondIndex < InnerGraph.NumberOfNodes; SecondIndex++) { MatrixOfTheShortesPathes[FirstIndex, SecondIndex] = DijkstraPathSearch.ShortestPathes[SecondIndex].Weight; } } return(true); } else { for (int Index = 0; Index < InnerGraph.NumberOfEdges; Index++) { InnerGraph.SetOfEdges[Index].Weight = InnerGraph.SetOfEdges[Index].Weight + BellmanFordPathSearch.ShortestPathes[InnerGraph.SetOfEdges[Index][0].Index].Weight - BellmanFordPathSearch.ShortestPathes[InnerGraph.SetOfEdges[Index][1].Index].Weight; } for (int FirstIndex = 0; FirstIndex < InnerGraph.NumberOfNodes; FirstIndex++) { DijkstraPathSearch = new DijkstraAlgorithm(InnerGraph); DijkstraPathSearch.FindTheShortestPathes(InnerGraph.SetOfNodes[FirstIndex]); for (int SecondIndex = 0; SecondIndex < InnerGraph.NumberOfNodes; SecondIndex++) { MatrixOfTheShortesPathes[FirstIndex, SecondIndex] = DijkstraPathSearch.ShortestPathes[SecondIndex].Weight; } } } return(true); }
static void Main(string[] args) { Dictionary <Vertix <String>, List <Node <String> > > graph = new Dictionary <Vertix <String>, List <Node <String> > >(); Vertix <String> v1 = new Vertix <String>("A"); Vertix <String> v2 = new Vertix <String>("B"); Vertix <String> v3 = new Vertix <String>("C"); Vertix <String> v4 = new Vertix <String>("D"); Vertix <String> v5 = new Vertix <String>("E"); //adjacent nodes of v1 List <Node <String> > arr1 = new List <Node <String> >(); arr1.Add(new Node <String>(v2, 2)); arr1.Add(new Node <String>(v3, 5)); arr1.Add(new Node <String>(v4, 7)); //arr1.Add(new Node<String>(v5, 4)); graph.Add(v1, arr1); List <Node <String> > arr2 = new List <Node <String> >(); //arr2.Add(new Node<String>(v1, 7)); arr2.Add(new Node <String>(v3, 2)); //arr2.Add(new Node<String>(v4, 2)); //arr2.Add(new Node<String>(v5, 6)); graph.Add(v2, arr2); List <Node <String> > arr3 = new List <Node <String> >(); //arr3.Add(new Node<String>(v1, 3)); //arr3.Add(new Node<String>(v2, 2)); arr3.Add(new Node <String>(v4, 2)); //arr3.Add(new Node<String>(v5, 1)); graph.Add(v3, arr3); // List <Node <String> > arr4 = new List <Node <String> >(); //arr4.Add(new Node<String>(v1, 1)); //arr4.Add(new Node<String>(v2, 2)); //arr4.Add(new Node<String>(v3, 2)); arr4.Add(new Node <String>(v5, 1)); graph.Add(v4, arr4); List <Node <String> > arr5 = new List <Node <String> >(); arr5.Add(new Node <String>(v1, 3)); arr5.Add(new Node <String>(v2, 3)); //arr5.Add(new Node<String>(v3, 5)); //arr5.Add(new Node<String>(v4, 4)); graph.Add(v5, arr5); Graph <String> Graph = new Graph <String>(graph); DijkstraAlgorithm <String> dijs = new DijkstraAlgorithm <String>(Graph, v1); Graph.printGraph(); Console.WriteLine(); Console.WriteLine(); dijs.PrintShortestPath(); }
static void Main(string[] args) { Graph.AddNode(new Node(7, "0", new Coordinate(0, 0))); Graph.AddNode(new Node(7, "1", new Coordinate(50, 100))); Graph.AddNode(new Node(7, "2", new Coordinate(100, 0))); Graph.AddNode(new Node(7, "3", new Coordinate(0, 200))); Graph.AddNode(new Node(7, "4", new Coordinate(250, 200))); Graph.AddNode(new Node(7, "5", new Coordinate(50, 250))); Graph.AddNode(new Node(7, "6", new Coordinate(150, 250))); Graph.AddTwoWayEdge(new Edge(7, Graph.SetOfNodes[0], Graph.SetOfNodes[1])); Graph.AddTwoWayEdge(new Edge(5, Graph.SetOfNodes[0], Graph.SetOfNodes[3])); Graph.AddTwoWayEdge(new Edge(8, Graph.SetOfNodes[1], Graph.SetOfNodes[2])); Graph.AddTwoWayEdge(new Edge(7, Graph.SetOfNodes[1], Graph.SetOfNodes[4])); Graph.AddTwoWayEdge(new Edge(9, Graph.SetOfNodes[1], Graph.SetOfNodes[3])); Graph.AddTwoWayEdge(new Edge(5, Graph.SetOfNodes[2], Graph.SetOfNodes[4])); Graph.AddTwoWayEdge(new Edge(15, Graph.SetOfNodes[3], Graph.SetOfNodes[4])); Graph.AddTwoWayEdge(new Edge(6, Graph.SetOfNodes[3], Graph.SetOfNodes[5])); Graph.AddTwoWayEdge(new Edge(8, Graph.SetOfNodes[5], Graph.SetOfNodes[4])); Graph.AddTwoWayEdge(new Edge(11, Graph.SetOfNodes[5], Graph.SetOfNodes[6])); Graph.AddTwoWayEdge(new Edge(9, Graph.SetOfNodes[6], Graph.SetOfNodes[4])); NewGraph.AddNode(new Node(7, "0", new Coordinate(0, 0))); NewGraph.AddNode(new Node(7, "1", new Coordinate(50, 100))); NewGraph.AddNode(new Node(7, "2", new Coordinate(100, 0))); NewGraph.AddNode(new Node(7, "3", new Coordinate(0, 200))); NewGraph.AddNode(new Node(7, "4", new Coordinate(500, 100))); NewGraph.AddNode(new Node(7, "5", new Coordinate(50, 250))); NewGraph.AddNode(new Node(7, "6", new Coordinate(150, 250))); NewGraph.AddOneWayEdge(new Edge(7, NewGraph.SetOfNodes[0], NewGraph.SetOfNodes[1])); NewGraph.AddOneWayEdge(new Edge(5, NewGraph.SetOfNodes[0], NewGraph.SetOfNodes[3])); NewGraph.AddOneWayEdge(new Edge(8, NewGraph.SetOfNodes[1], NewGraph.SetOfNodes[2])); NewGraph.AddOneWayEdge(new Edge(7, NewGraph.SetOfNodes[1], NewGraph.SetOfNodes[4])); NewGraph.AddOneWayEdge(new Edge(9, NewGraph.SetOfNodes[1], NewGraph.SetOfNodes[3])); NewGraph.AddOneWayEdge(new Edge(5, NewGraph.SetOfNodes[2], NewGraph.SetOfNodes[4])); NewGraph.AddOneWayEdge(new Edge(15, NewGraph.SetOfNodes[3], NewGraph.SetOfNodes[4])); NewGraph.AddOneWayEdge(new Edge(6, NewGraph.SetOfNodes[3], NewGraph.SetOfNodes[5])); NewGraph.AddOneWayEdge(new Edge(8, NewGraph.SetOfNodes[5], NewGraph.SetOfNodes[4])); NewGraph.AddOneWayEdge(new Edge(11, NewGraph.SetOfNodes[5], NewGraph.SetOfNodes[6])); NewGraph.AddOneWayEdge(new Edge(9, NewGraph.SetOfNodes[4], NewGraph.SetOfNodes[6])); DepthFirstSearchAlgorithm DFS = new DepthFirstSearchAlgorithm(Graph); BreadthFirstSearchAlgorithm BFS = new BreadthFirstSearchAlgorithm(Graph); KruscalAlgorithm KruskalTreeSearch = new KruscalAlgorithm(Graph); PrimAlgorithm PrimTreeSearch = new PrimAlgorithm(Graph); BellmanFordAlgorithm BellmanFordPathSearch = new BellmanFordAlgorithm(Graph); DijkstraAlgorithm DijkstraPathSearch = new DijkstraAlgorithm(Graph); FloydWarshallAlgorithm FloydWarshallPathSearch = new FloydWarshallAlgorithm(Graph); JohnsonAlgorithm JohnsonPathSearch = new JohnsonAlgorithm(Graph); AStarAlgorithm AStarPathSearch = new AStarAlgorithm(Graph); Console.WriteLine("[Current Graph]\n", Color.Green); Console.WriteLine("[0] [2]"); Console.WriteLine("|\\ /|"); Console.WriteLine("| \\ 7 8/ |"); Console.WriteLine("| \\ / |5"); Console.WriteLine("|5 \\ / |"); Console.WriteLine("| [1] |"); Console.WriteLine("| 9 / \\7 |"); Console.WriteLine("| / \\ |"); Console.WriteLine("| / 15 \\ |"); Console.WriteLine("[3]--------[4]"); Console.WriteLine(" \\ / \\ "); Console.WriteLine(" \\ 8/ \\9"); Console.WriteLine(" 6 \\ / \\"); Console.WriteLine(" \\ / \\"); Console.WriteLine(" [5]---------[6]"); Console.WriteLine(" 11\n"); Console.WriteLine("[1 : Depth First Search]\n", Color.Green); DFS.DepthFirstSearch(Graph.SetOfNodes[0]); Utilities.PrintResult(DFS.ResultOfSearching); Console.WriteLine(); Console.WriteLine("[2 : Breadth First Search]\n", Color.Green); BFS.BreadthFirstSearch(Graph.SetOfNodes[0]); Utilities.PrintResult(BFS.ResultOfSearching); Console.WriteLine(); FordFulkersonAlgorithm FordFulkersonStreamSearch = new FordFulkersonAlgorithm(NewGraph); Console.WriteLine($"[3 : Kruskal Tree Search]\n", Color.Green); KruskalTreeSearch.FindMinimumSpanningTree(); Utilities.PrintResult(KruskalTreeSearch.MinimumSpanningTree); Console.WriteLine(); Console.WriteLine($"[4 : Prim Tree Search]\n", Color.Green); PrimTreeSearch.FindMinimumSpanningTree(); Utilities.PrintResult(PrimTreeSearch.MinimumSpanningTree); Console.WriteLine(); Console.WriteLine("[5 : Bellman-Ford Path Search]\n", Color.Green); BellmanFordPathSearch.FindTheShortestPathes(Graph.SetOfNodes[0]); Utilities.PrintResult(BellmanFordPathSearch.ShortestPathes, Graph.SetOfNodes[0]); Console.WriteLine("[6 : Dijkstra Path Search]\n", Color.Green); DijkstraPathSearch.FindTheShortestPathes(Graph.SetOfNodes[0]); Utilities.PrintResult(DijkstraPathSearch.ShortestPathes, Graph.SetOfNodes[0]); FloydWarshallPathSearch.FindAllTheShortestPathes(); Console.WriteLine("[7 : Floyd-Warshall Path Search]\n", Color.Green); Utilities.PrintResult(FloydWarshallPathSearch.MatrixOfTheShortesPathes); Console.WriteLine(); JohnsonPathSearch.FindAllTheShortestPathes(); Console.WriteLine("[8 : Johnson Path Search]\n", Color.Green); Utilities.PrintResult(JohnsonPathSearch.MatrixOfTheShortesPathes); Console.WriteLine(); Console.WriteLine("[9 : Ford-Fulkerson Stream Search]\n", Color.Green); FordFulkersonStreamSearch.FindMaximumFlowWithDFSRealization(NewGraph.SetOfNodes[0], NewGraph.SetOfNodes[6]); Console.WriteLine($"Maximum stream capacity is : {FordFulkersonStreamSearch.CapacityOfFlow}"); Console.WriteLine(); Console.WriteLine("[10 : A* Path Search]\n", Color.Green); AStarPathSearch.FindTheShortesPath(Graph.SetOfNodes[0], Graph.SetOfNodes[6]); Utilities.PrintResult(AStarPathSearch.ShortesPath); Console.ReadKey(); }