public static Graph Build(string[] file) { if (file.Length < 1) throw new ArgumentException("No info in file!"); var count = int.Parse(file[0]); if (file.Length < count + 1) throw new ArgumentException("Wrong lines count!"); var points = Enumerable.Range(0, count).Select(i => new Point(i)).ToArray(); var edges = new MinBinaryHeap<Edge>(); for (var i = 1; i < count + 1; i++) { var positions = file[i].Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) .ToArray(); foreach (var positionInString in positions) { var position = int.Parse(positionInString[0]); var weight = int.Parse(positionInString[1]); var from = points[i - 1]; var to = points[position]; if (!edges.Any(edge => edge.ContainsPoints(from, to))) { edges.Add(new Edge(from, to, weight)); } } } return new Graph(edges, count, points); }