示例#1
0
文件: Task.cs 项目: svejdo1/Euler
        public string Run()
        {
            var matrix = new List <int[]>();

            using (var stream = typeof(Task).Assembly.GetManifestResourceStream(typeof(Task), "matrix.txt"))
            {
                using (var reader = new StreamReader(stream))
                {
                    do
                    {
                        string line = reader.ReadLine();
                        if (line == null)
                        {
                            break;
                        }
                        int[] parts = line.Split(new char[] { ',' }).Select(c => Convert.ToInt32(c)).ToArray();
                        matrix.Add(parts);
                    } while (true);
                }
            }

            var dijskra = new Dijskra <Point2D>();

            for (var x = 0; x < 80; x++)
            {
                for (var y = 0; y < 80; y++)
                {
                    var edges = new Dictionary <Point2D, long>();
                    if (x < 79)
                    {
                        edges.Add(new Point2D(x + 1, y), matrix[y][x + 1]);
                    }
                    if (y < 79)
                    {
                        edges.Add(new Point2D(x, y + 1), matrix[y + 1][x]);
                    }
                    if (x > 0)
                    {
                        edges.Add(new Point2D(x - 1, y), matrix[y][x - 1]);
                    }
                    if (y > 0)
                    {
                        edges.Add(new Point2D(x, y - 1), matrix[y - 1][x]);
                    }
                    dijskra.AddVertex(new Point2D(x, y), edges);
                }
            }
            var  path = dijskra.ShortestPath(new Point2D(0, 0), new Point2D(79, 79));
            long sum  = matrix[0][0];

            foreach (var point in path)
            {
                sum += matrix[point.Y][point.X];
            }


            return(Convert.ToString(sum));
        }
示例#2
0
文件: Task.cs 项目: svejdo1/Euler
        public string Run()
        {
            var matrix = new List<int[]>();
            using (var stream = typeof(Task).Assembly.GetManifestResourceStream(typeof(Task), "matrix.txt"))
            {
                using (var reader = new StreamReader(stream))
                {
                    do
                    {
                        string line = reader.ReadLine();
                        if (line == null)
                            break;
                        int[] parts = line.Split(new char[] { ',' }).Select(c => Convert.ToInt32(c)).ToArray();
                        matrix.Add(parts);
                    } while (true);
                }
            }

            var dijskra = new Dijskra<Point2D>();
            for (var x = 0; x < 80; x++)
                for (var y = 0; y < 80; y++)
                {
                    var edges = new Dictionary<Point2D, long>();
                    if (x < 79)
                    {
                        edges.Add(new Point2D(x + 1, y), matrix[y][x + 1]);
                    }
                    if (y < 79)
                    {
                        edges.Add(new Point2D(x, y + 1), matrix[y + 1][x]);
                    }
                    if (x > 0)
                    {
                        edges.Add(new Point2D(x - 1, y), matrix[y][x - 1]);
                    }
                    if (y > 0)
                    {
                        edges.Add(new Point2D(x, y - 1), matrix[y - 1][x]);
                    }
                    dijskra.AddVertex(new Point2D(x, y), edges);
                }
            var path = dijskra.ShortestPath(new Point2D(0, 0), new Point2D(79, 79));
            long sum = matrix[0][0];
            foreach(var point in path)
            {
                sum += matrix[point.Y][point.X];
            }

            return Convert.ToString(sum);
        }
示例#3
0
 public override string ExecuteFirst()
 => Dijskra.Execute(GetFileLines()).ToString();
示例#4
0
        public override string ExecuteSecond()
        {
            var lines = GetFileLines().Select(x => x.Select(y => y - '0').ToArray()).ToArray();

            return(Dijskra.Execute(ExpendGraph(lines), lines[0].Length * 5, lines.Length * 5).ToString());
        }