Example #1
0
    public static void Main()
    {
        int numberOfVertices = 9;
        var graphEdges       = new List <Edge>
        {
            new Edge(0, 3, 9),
            new Edge(0, 5, 4),
            new Edge(0, 8, 5),
            new Edge(1, 4, 8),
            new Edge(1, 7, 7),
            new Edge(2, 6, 12),
            new Edge(3, 5, 2),
            new Edge(3, 6, 8),
            new Edge(3, 8, 20),
            new Edge(4, 7, 10),
            new Edge(6, 8, 7)
        };

        var minimumSpanningForest = KruskalAlgorithm.Kruskal(numberOfVertices, graphEdges);

        Console.WriteLine("Minimum spanning forest weight: " +
                          minimumSpanningForest.Sum(e => e.Weight));

        foreach (var edge in minimumSpanningForest)
        {
            Console.WriteLine(edge);
        }
    }
Example #2
0
        public void FisrstSampleInput()
        {
            int nodesCount = 4;

            var edges = new List <Edge>
            {
                new Edge(0, 1, 9),
                new Edge(0, 3, 4),
                new Edge(3, 1, 6),
                new Edge(3, 2, 11),
                new Edge(1, 2, 5)
            };

            var expectedEdges = new Edge[]
            {
                edges[1],
                edges[4],
                edges[2]
            };

            var actualEdges = KruskalAlgorithm.Kruskal(nodesCount, edges);

            CollectionAssert.AreEqual(expectedEdges, actualEdges);
            Assert.AreEqual(15, actualEdges.Sum(e => e.Weight));
        }
Example #3
0
        private void buttonKruskal_Click(object sender, EventArgs e)
        {
            Stopwatch t = new Stopwatch();

            t.Start();
            var p = KruskalAlgorithm.Kruskal(graph);

            t.Stop();

            Graph dist = new Graph();

            foreach (var x in graph.Nodes)
            {
                dist.AddNode(x);
            }

            double cost = 0;

            for (int i = 0; i < p.Length / 2; i++)
            {
                foreach (var x in graph.Edges)
                {
                    if (x.From.Id == p[i, 0] && x.To.Id == p[i, 1] || x.From.Id == p[i, 1] && x.To.Id == p[i, 0])
                    {
                        x.IsMinE = true;
                        cost    += x.Weight;
                        dist.AddEdge(x);
                    }
                }
            }


            cost = 0;
            var distRez = DijkstraAlgorithm.Dijkstra(GraphRepresentation.toWeightMatrix(dist), 0, dist.Nodes.Count);

            textBoxResult.Text = "Расстояние в метрах от главного коммутатора до: \n\r";

            for (int i = 1; i < dist.Nodes.Count; i++)
            {
                textBoxResult.Text += "Коммутатора " + i + " = " + distRez[i] + " м." + Environment.NewLine;
                cost += distRez[i];
            }


            labelCost.Text = "Итоговая стоимость (р) " + cost * Convert.ToDouble(textBoxCost.Text);
            labelTime.Text = "Время в тиках " + t.ElapsedTicks;

            Repaint();
        }
Example #4
0
        public void TestKruskalWithSingleEdge()
        {
            int numberOfVertices = 2;
            var graphEdges       = new List <Edge>
            {
                new Edge(0, 1, 3)
            };

            var minimumSpanningForest = KruskalAlgorithm.Kruskal(numberOfVertices, graphEdges.ToList());
            var totalWeight           = minimumSpanningForest.Sum(edge => edge.Weight);

            var expectedTotalWeight = 3;
            var expectedForest      = new[] { graphEdges[0] };

            Assert.AreEqual(expectedTotalWeight, totalWeight, "Weights should match.");
            CollectionAssert.AreEqual(
                expectedForest,
                minimumSpanningForest,
                "The correct edges should be present in the MST in the correct order.");
        }
Example #5
0
        public void ThirdSampleInput()
        {
            int nodesCount = 8;

            var edges = new List <Edge>
            {
                new Edge(0, 1, 4),
                new Edge(0, 2, 5),
                new Edge(0, 3, 1),
                new Edge(1, 2, 8),
                new Edge(1, 3, 2),
                new Edge(2, 3, 3),
                new Edge(2, 4, 16),
                new Edge(2, 5, 9),
                new Edge(3, 4, 7),
                new Edge(3, 5, 14),
                new Edge(4, 5, 12),
                new Edge(4, 6, 22),
                new Edge(4, 7, 9),
                new Edge(5, 6, 6),
                new Edge(5, 7, 18),
                new Edge(6, 7, 15)
            };

            var expectedEdges = new Edge[]
            {
                edges[2],
                edges[4],
                edges[5],
                edges[13],
                edges[8],
                edges[7],
                edges[12]
            };

            var actualEdges = KruskalAlgorithm.Kruskal(nodesCount, edges);

            CollectionAssert.AreEqual(expectedEdges, actualEdges);
            Assert.AreEqual(37, actualEdges.Sum(e => e.Weight));
        }
Example #6
0
        public void SecondSampleInput()
        {
            int nodesCount = 9;

            var edges = new List <Edge>
            {
                new Edge(1, 4, 8),
                new Edge(4, 0, 6),
                new Edge(1, 7, 7),
                new Edge(4, 7, 10),
                new Edge(4, 8, 3),
                new Edge(7, 8, 4),
                new Edge(0, 8, 5),
                new Edge(8, 6, 9),
                new Edge(8, 3, 20),
                new Edge(0, 5, 4),
                new Edge(0, 3, 9),
                new Edge(6, 3, 8),
                new Edge(6, 2, 12),
                new Edge(5, 3, 2),
                new Edge(3, 2, 14)
            };

            var expectedEdges = new Edge[]
            {
                edges[13],
                edges[4],
                edges[5],
                edges[9],
                edges[6],
                edges[2],
                edges[11],
                edges[12]
            };

            var actualEdges = KruskalAlgorithm.Kruskal(nodesCount, edges);

            CollectionAssert.AreEqual(expectedEdges, actualEdges);
            Assert.AreEqual(45, actualEdges.Sum(e => e.Weight));
        }
Example #7
0
        public void TestKruskalWith9VerticesAnd11Edges()
        {
            int numberOfVertices = 9;
            var graphEdges       = new List <Edge>
            {
                new Edge(0, 3, 9),
                new Edge(0, 5, 4),
                new Edge(0, 8, 5),
                new Edge(1, 4, 8),
                new Edge(1, 7, 7),
                new Edge(2, 6, 12),
                new Edge(3, 5, 2),
                new Edge(3, 6, 8),
                new Edge(3, 8, 20),
                new Edge(4, 7, 10),
                new Edge(6, 8, 7)
            };

            var minimumSpanningForest = KruskalAlgorithm.Kruskal(numberOfVertices, graphEdges.ToList());
            var totalWeight           = minimumSpanningForest.Sum(edge => edge.Weight);

            var expectedTotalWeight = 45;
            var expectedForest      = new[]
            {
                graphEdges[6],
                graphEdges[1],
                graphEdges[2],
                graphEdges[4],
                graphEdges[10],
                graphEdges[3],
                graphEdges[5]
            };

            Assert.AreEqual(expectedTotalWeight, totalWeight, "Weights should match.");
            CollectionAssert.AreEqual(
                expectedForest,
                minimumSpanningForest,
                "The correct edges should be present in the MST in the correct order.");
        }