Пример #1
0
        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);
        }