private static void MakeComponents() { var A = new WeightedGraphNode <char>('A'); var B = new WeightedGraphNode <char>('B'); var C = new WeightedGraphNode <char>('C'); var D = new WeightedGraphNode <char>('D'); var E = new WeightedGraphNode <char>('E'); var F = new WeightedGraphNode <char>('F'); A.AddMutualNeighbor(B); A.AddMutualNeighbor(C); B.AddMutualNeighbor(C); D.AddMutualNeighbor(E); var G = new Graph <char>(A, B, C, D, E, F); var components = G.FindConnectedComponents(); foreach (var component in components) { component.PrintNodes(); Console.WriteLine(); } }
static void MakeWeightedGraph() { //Vertex Set WeightedGraphNode <char> A = new WeightedGraphNode <char>('A'); WeightedGraphNode <char> B = new WeightedGraphNode <char>('B'); WeightedGraphNode <char> C = new WeightedGraphNode <char>('C'); WeightedGraphNode <char> D = new WeightedGraphNode <char>('D'); WeightedGraphNode <char> E = new WeightedGraphNode <char>('E'); WeightedGraphNode <char> F = new WeightedGraphNode <char>('F'); WeightedGraphNode <char> G = new WeightedGraphNode <char>('G'); //Edge Set A.AddMutualNeighbor(B, 4); A.AddMutualNeighbor(G, 2); A.AddMutualNeighbor(D, 1); B.AddMutualNeighbor(D, 6); B.AddMutualNeighbor(G, 9); C.AddMutualNeighbor(D, 6); C.AddMutualNeighbor(E, 4); E.AddMutualNeighbor(F, 3); F.AddMutualNeighbor(G, 5); GraphNode <char>[] nodes = { A, B, C, D, E, F, G }; Graph <char> a_graph = new Graph <char>(nodes); Console.WriteLine("Finding the shorting path between B and E"); var path = a_graph.RunDijkstra(B, E); if (path == null) { Console.WriteLine("Nope :("); } else { Console.WriteLine("\n The shortest path has weight {0} ", path.PathWeightToHere); //use a stack to figure out the order to take var reverse_backtracking = new Stack <NodePath <char> >(); while (path != null) { reverse_backtracking.Add(path); path = (WeightedNodePath <char>)path.Parent; } while (!reverse_backtracking.IsEmpty()) { var top = reverse_backtracking.Pop(); Console.Write("{0}", top.Node.GetValue()); if (reverse_backtracking.Count > 0) { Console.Write(" -> "); } } Console.WriteLine("\n-------------------------------\n"); } }
private static void MakeKruskals() { var A = new WeightedGraphNode <char>('A'); var B = new WeightedGraphNode <char>('B'); var C = new WeightedGraphNode <char>('C'); var D = new WeightedGraphNode <char>('D'); var E = new WeightedGraphNode <char>('E'); var F = new WeightedGraphNode <char>('F'); A.AddMutualNeighbor(B, 1); A.AddMutualNeighbor(D, 2); B.AddMutualNeighbor(D, 4); B.AddMutualNeighbor(C, 2); C.AddMutualNeighbor(D, 3); C.AddMutualNeighbor(E, 4); C.AddMutualNeighbor(F, 5); E.AddMutualNeighbor(F, 1); var G = new Graph <char>(A, B, C, D, E, F); var MSF_G = G.KruskalsAlgorithmForMinimumSpanningForest(); var edges = MSF_G.GetEdgeList(); foreach (var edge in edges) { if (edge.Node1.GetValue().CompareTo(edge.Node2.GetValue()) > 0) { Console.WriteLine(edge.FlipDirection().ToString()); } else { Console.WriteLine(edge.ToString()); } } }