public void ConfirmExample() { var matrix = new[] { new long [] {131, 673, 234, 103, 18}, new long [] {201, 96, 342, 965, 150}, new long [] {630, 803, 746, 422, 111}, new long [] {537, 699, 497, 121, 956}, new long [] {805, 732, 524, 37, 331} }; var pathHelper = new AStarPathHelper(matrix); var minPathTopLeftBottomRight = pathHelper.TopLeftBottomRight(); foreach (var row in matrix) { Console.WriteLine(string.Empty); for (var idx = 0; idx < row.Length; ++idx) { Console.Write("{0} ", row[idx].ToString("0000")); } Console.WriteLine("---"); } Assert.AreEqual(2297, minPathTopLeftBottomRight); }
public void ConfirmAvoidingCirclingIntoSelf() { var matrix = new[] { new long [] {100, 673, 234, 103, 18}, new long [] {100, 100, 342, 965, 150}, new long [] {630, 100, 5, 4, 3}, new long [] {537, 699, 6, 121, 2}, new long [] {805, 732, 7, 8, 1} }; var pathHelper = new AStarPathHelper(matrix); var minPath = pathHelper.TopLeftBottomRight(); foreach (var row in matrix) { Console.WriteLine(string.Join(" ", row)); } Assert.AreEqual(415, minPath); }
public void FindMinimumPathForLargeMatrix() { const string filePath = "Puzzles.ProjectEuler.DataFiles.Problem_0083_matrix.txt"; var fileContent = FileHelper.GetEmbeddedResourceContent(filePath); var fileLines = fileContent.Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries); fileLines.Length.Should().Be(80); var matrix = new long[80][]; var count = 0; foreach (var line in fileLines) { var elements = line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); matrix[count] = new long[elements.Length]; for (var i = 0; i <= elements.Length - 1; ++i) { matrix[count][i] = Convert.ToInt32(elements[i]); } count++; } var pathHelper = new AStarPathHelper(matrix); var minPath = pathHelper.TopLeftBottomRight(); Console.WriteLine("Path: {0}", minPath); minPath.Should().Be(425185); }