Example #1
0
        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();
            }
        }
Example #2
0
        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");
            }
        }
Example #3
0
        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());
                }
            }
        }