Example #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("GRAPH AND GRAPH TRAVERSAL");
            var network = new Graph();

            network.PrintAdjacencyList();
            network.BFS(0);
            network.DFS(0);
        }
Example #2
0
        static void Main(string[] args)
        {
            var g = new Graph <int>();

            g.AddVertex(0);
            g.AddVertex(1);
            g.AddVertex(2);
            g.AddVertex(3);

            g.AddEdge(0, 1);
            g.AddEdge(0, 2);
            g.AddEdge(1, 2);
            g.AddEdge(2, 0);
            g.AddEdge(2, 3);
            g.AddEdge(3, 3);

            g.BFS(2); // 2 3 0 1
            g.DFS(0); // 0 2 3 1

            g.DFS_iter(0);

            Console.ReadKey();
        }
Example #3
0
        static void Main()
        {
            /*-------------------Undirected and unweighted edges------------------------------*/

            //Graph<int> graph = new Graph<int>(false, false); // initiate a unidirectional graph

            //Node<int> n1 = graph.AddNode(1); // add numbered nodes
            //Node<int> n2 = graph.AddNode(2);
            //Node<int> n3 = graph.AddNode(3);
            //Node<int> n4 = graph.AddNode(4);
            //Node<int> n5 = graph.AddNode(5);
            //Node<int> n6 = graph.AddNode(6);
            //Node<int> n7 = graph.AddNode(7);
            //Node<int> n8 = graph.AddNode(8);

            //graph.AddEdge(n1, n2); // add edges between nodes
            //graph.AddEdge(n1, n3);
            //graph.AddEdge(n2, n4);
            //graph.AddEdge(n3, n4);
            //graph.AddEdge(n4, n5);
            //graph.AddEdge(n5, n6);
            //graph.AddEdge(n5, n7);
            //graph.AddEdge(n5, n8);
            //graph.AddEdge(n6, n7);
            //graph.AddEdge(n7, n8);

            //List<Node<int>> dfsNodes = graph.DFS(); // returns a list of Node instances
            //dfsNodes.ForEach(n => WriteLine(n));

            /*-------------------Undirected and weighted edges------------------------------*/

            //Graph<int> graph = new Graph<int>(false, true);

            //Node<int> n1 = graph.AddNode(1); // add numbered nodes
            //Node<int> n2 = graph.AddNode(2);
            //Node<int> n3 = graph.AddNode(3);
            //Node<int> n4 = graph.AddNode(4);
            //Node<int> n5 = graph.AddNode(5);
            //Node<int> n6 = graph.AddNode(6);
            //Node<int> n7 = graph.AddNode(7);
            //Node<int> n8 = graph.AddNode(8);

            // graph.AddEdge(n1, n2, 3);
            // graph.AddEdge(n1, n3, 5);
            // graph.AddEdge(n2, n4, 4);
            // graph.AddEdge(n3, n4, 12);
            // graph.AddEdge(n4, n5, 9);
            // graph.AddEdge(n4, n8, 8);
            // graph.AddEdge(n5, n6, 4);
            // graph.AddEdge(n5, n7, 5);
            // graph.AddEdge(n5, n8, 1);
            // graph.AddEdge(n6, n7, 6);
            // graph.AddEdge(n7, n8, 20);
            // graph.AddEdge(n2, n6, 20);
            // graph.AddEdge(n2, n5, 20);

            /*-------------------Directed and weighted edges------------------------------*/
            WriteLine("New Graph 1");
            Graph <int> graph = new Graph <int>(true, true);

            Node <int> n1 = graph.AddNode(1); // you can add these to a file
            Node <int> n2 = graph.AddNode(2);
            Node <int> n3 = graph.AddNode(3);
            Node <int> n4 = graph.AddNode(4);
            Node <int> n5 = graph.AddNode(5);
            Node <int> n6 = graph.AddNode(6);
            Node <int> n7 = graph.AddNode(7);
            Node <int> n8 = graph.AddNode(8);

            graph.AddEdge(n1, n2, 9); // you can add these to a file
            graph.AddEdge(n1, n3, 5);
            graph.AddEdge(n2, n1, 3);
            graph.AddEdge(n2, n4, 18);
            graph.AddEdge(n3, n4, 12);
            graph.AddEdge(n4, n2, 2);
            graph.AddEdge(n4, n8, 8);
            graph.AddEdge(n5, n4, 9);
            graph.AddEdge(n5, n6, 2);
            graph.AddEdge(n5, n7, 5);
            graph.AddEdge(n5, n8, 3);
            graph.AddEdge(n6, n7, 1);
            graph.AddEdge(n7, n5, 4);
            graph.AddEdge(n7, n8, 6);
            graph.AddEdge(n8, n5, 3);

            List <Node <int> > dfsNodes = graph.DFS(); // returns a list of Node instances

            dfsNodes.ForEach(n => WriteLine(n));



            /*-------------------Kruskal's Algorithm------------------------------*/

            //List<Edge<int>> mstKruskal = graph.MSTKruskal();
            //mstKruskal.ForEach(e => WriteLine(e));



            /*-------------------Prim's Algorithm------------------------------*/

            //List<Edge<int>> mstPrim = graph.MSTPrim();
            //mstPrim.ForEach(e => WriteLine(e));

            /*-------------------Depth-First Search------------------------------*/

            //List<Node<int>> dfsNodes = graph.DFS(); // returns a list of Node instances
            //dfsNodes.ForEach(n => WriteLine(n));

            /*-------------------Breadth-first Search------------------------------*/
            //List<Node<int>> bfsNodes = graph.BFS(); // returns a list of Node instances
            //bfsNodes.ForEach(n => WriteLine(n));



            /*-------------------telecomm cable------------------------------*/
            //WriteLine("Start example here: \n");

            //Graph<string> graph = new Graph<string>(false, true);

            //Node<string> nodeb1 = graph.AddNode("b1");
            //Node<string> nodeb2 = graph.AddNode("b2");
            //Node<string> nodeb3 = graph.AddNode("b3");
            //Node<string> nodeb4 = graph.AddNode("b4");
            //Node<string> nodeb5 = graph.AddNode("b5");
            //Node<string> nodeb6 = graph.AddNode("b6");
            //Node<string> noder1 = graph.AddNode("r1");
            //Node<string> noder2 = graph.AddNode("r2");
            //Node<string> noder3 = graph.AddNode("r3");
            //Node<string> noder4 = graph.AddNode("r4");
            //Node<string> noder5 = graph.AddNode("r5");
            //Node<string> noder6 = graph.AddNode("r6");

            //graph.AddEdge(nodeb1, nodeb2, 2);
            //graph.AddEdge(nodeb1, nodeb3, 20);
            //graph.AddEdge(nodeb1, nodeb4, 30);
            //graph.AddEdge(nodeb2, nodeb4, 20);
            //graph.AddEdge(nodeb2, nodeb3, 30);
            //graph.AddEdge(nodeb3, nodeb4, 2);
            //graph.AddEdge(nodeb2, noder2, 25);
            //graph.AddEdge(nodeb4, noder4, 25);
            //graph.AddEdge(noder1, noder2, 1);
            //graph.AddEdge(noder2, noder3, 1);
            //graph.AddEdge(noder3, noder4, 1);
            //graph.AddEdge(noder1, noder5, 75);
            //graph.AddEdge(noder3, noder6, 100);
            //graph.AddEdge(noder5, noder6, 3);
            //graph.AddEdge(noder6, nodeb6, 10);
            //graph.AddEdge(noder6, nodeb5, 3);
            //graph.AddEdge(nodeb5, nodeb6, 6);


            //List<Edge<string>> mstPrim = graph.MSTPrim();
            //mstPrim.ForEach(e => WriteLine(e));
            //WriteLine("Total Cost: " + mstPrim.Sum(e => e.Weight));
        }
Example #4
0
        static void Main(string[] args)
        {
            Graph graph = new Graph();
            bool  flag  = true;

            Menu();
            while (flag)
            {
                Console.WriteLine("Ваш выбор: ");
                int n = int.Parse(Console.ReadLine());
                switch (n)
                {
                case 1:
                    Console.WriteLine("Введите название вершины: ");
                    string name = Console.ReadLine();
                    Console.WriteLine("Вершина добавлена с номером {0}", graph.AddVertex(name));
                    break;

                case 2:
                    Console.WriteLine("Введите первую вершину: ");
                    string v1 = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    string v2 = Console.ReadLine();
                    Console.WriteLine("Введите расстояние: ");
                    int d = int.Parse(Console.ReadLine());
                    graph.AddEdge(v1, v2, d);
                    break;

                case 3:
                    Console.WriteLine("Введите название вершины: ");
                    string vert = Console.ReadLine();
                    graph.DeleteVertex(vert);
                    break;

                case 4:
                    Console.WriteLine("Введите первую вершину: ");
                    string v1_ = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    string v2_ = Console.ReadLine();
                    graph.DeleteEdge(v1_, v2_);
                    break;

                case 5:
                    graph.WriteMatrix("input.txt");
                    break;

                case 6:
                    graph.Print();
                    break;

                case 7:
                    Console.WriteLine("Введите вершину: ");
                    string vertex = Console.ReadLine();
                    foreach (var v in graph.FindАdjacentVertexs(vertex))
                    {
                        Console.Write(v.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 8:
                    Console.WriteLine("Введите вершину: ");
                    vertex = Console.ReadLine();
                    foreach (var v in graph.FindNonАdjacentVertexs(vertex))
                    {
                        Console.Write(v.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 9:
                    Graph graph1 = graph.GetdisorientedGraph();
                    graph1.Print();
                    break;

                case 10:
                    Console.WriteLine("Введите вершину:");
                    var ve = Console.ReadLine();
                    foreach (var ver in graph.DFS(ve))
                    {
                        Console.WriteLine(ver.Name);
                    }
                    break;

                case 11:
                    int cnt = 0;
                    if (graph.IsDisorientedGraph())
                    {
                        foreach (var comp in graph.FindRelatedComponents())
                        {
                            cnt++;
                            Console.Write("{0} компонента связанности: ", cnt);
                            foreach (var _vertex in comp)
                            {
                                Console.Write(_vertex.Name + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    else
                    {
                        foreach (var comp in graph.FindStrongRelatedComponents())
                        {
                            cnt++;
                            Console.Write("{0} компонента сильной связанности: ", cnt);
                            foreach (var _vertex in comp)
                            {
                                Console.Write(_vertex + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    break;

                case 12:
                    cnt = 0;
                    foreach (var comp in graph.FindStrongRelatedComponents())
                    {
                        cnt++;
                        Console.Write("{0} компонента сильной связанности: ", cnt);
                        foreach (var _vertex in comp)
                        {
                            Console.Write(_vertex + " ");
                        }
                        Console.WriteLine();
                    }
                    break;

                case 13:
                    Graph copy = new Graph(graph);
                    graph = graph.GetdisorientedGraph();
                    Graph minGraph = graph.AlgBoruvka();
                    graph = copy;
                    minGraph.Print();
                    break;

                case 14:
                    Console.WriteLine(graph.FindVertexWithMinDistancees().Name);
                    break;

                case 15:
                    Console.Write("Центр графа: ");
                    foreach (var verte in graph.FindCenter())
                    {
                        Console.Write(verte.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 16:
                    Console.WriteLine("Минимальные расстояния: ");
                    foreach (var edge in graph.GetMinDistancesForEachPair())
                    {
                        Console.WriteLine(edge.V1.Name + " " + edge.V2.Name + " " + edge.Distance);
                    }
                    break;

                case 17:
                    Console.WriteLine("Введите первую вершину: ");
                    v1 = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    v2 = Console.ReadLine();
                    Console.Write("Максимальный поток: {0} ", graph.maxFlow(v1, v2));
                    Console.WriteLine();
                    break;

                case 18:
                    flag = false;
                    break;
                }
            }
        }