Exemplo n.º 1
0
        public static void Main(string[] args)
        {
            string[] gNodesEdges = Console.ReadLine().TrimEnd().Split(' ');

            int gNodes = Convert.ToInt32(gNodesEdges[0]);
            int gEdges = Convert.ToInt32(gNodesEdges[1]);

            List <int> gFrom   = new List <int>();
            List <int> gTo     = new List <int>();
            List <int> gWeight = new List <int>();
            WeightedUndirectedGraph <int> graph = new WeightedUndirectedGraph <int>();

            for (int i = 0; i < gEdges; i++)
            {
                string[] gFromToWeight = Console.ReadLine().TrimEnd().Split(' ');

                graph.AddEdge(Convert.ToInt32(gFromToWeight[0]), Convert.ToInt32(gFromToWeight[1]), Convert.ToInt32(gFromToWeight[2]));
            }

            int res = MST_Algorithms.Kruskal(graph);

            Console.WriteLine(res.ToString());
        }
Exemplo n.º 2
0
        public static int Kruskal(WeightedUndirectedGraph <int> graph)
        {
            DisjointSet set = new DisjointSet();

            foreach (var nodesKey in graph.Nodes.Keys)
            {
                set.MakeSet(nodesKey);
            }

            List <Edge> sortedEdges = graph.Edges.OrderBy(x => x.Weight).ToList();
            int         result      = 0;

            foreach (var edge in sortedEdges)
            {
                if (set.FindSet(edge.Node1) != set.FindSet(edge.Node2))
                {
                    // edge.PrintEdge();
                    result += edge.Weight;
                    set.Union(edge.Node1, edge.Node2);
                }
            }

            return(result);
        }