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()); }
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); }