public static void Run() { string s = @" 75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 "; TriangleTree tree = TriangleTree.Parse(s); Debug.WriteLine(tree.ToString()); int answer = tree.CalculateMaximumPathSum(); Debug.WriteLine("The answer is " + answer); }
public static void Run() { string filename = @"Files\067.txt"; string s = File.ReadAllText(filename); TriangleTree tree = TriangleTree.Parse(s); Debug.WriteLine(tree.ToString()); int answer = tree.CalculateMaximumPathSum(); Debug.WriteLine("The answer is " + answer); }
// Takes a string that looks like: // // 3 // 7 4 // 2 4 6 // 8 5 9 3 // // and parses it into a TriangleTree object. // public static TriangleTree Parse(string s) { TriangleTree tree = new TriangleTree(); StringReader reader = new StringReader(s.Trim()); // Start by putting them in a list of arrays List <TriangleTreeNode[]> treelist = new List <TriangleTreeNode[]>(); while (reader.Peek() != -1) { string line = reader.ReadLine().Trim(); string[] itemsInLine = line.Split(new char[] { ' ' }).Where(i => !string.IsNullOrEmpty(i)).ToArray(); int[] ints = itemsInLine.Select(i => int.Parse(i)).ToArray(); treelist.Add(ints.Select(i => new TriangleTreeNode { Value = i }).ToArray()); } // Set the relationships for (int i = 1; i < treelist.Count; i++) { var parentArray = treelist[i - 1]; for (int j = 0; j < treelist[i].Length; j++) { var node = treelist[i][j]; var leftParent = j == 0 ? null : parentArray[j - 1]; var rightParent = j == treelist[i].Length - 1 ? null : parentArray[j]; if (leftParent != null) { node.LeftParent = leftParent; leftParent.RightChild = node; } if (rightParent != null) { node.RightParent = rightParent; rightParent.LeftChild = node; } } } // Assign the root tree.Root = treelist[0][0]; return(tree); }
public TriangleTree Clone() { TriangleTree clone = TriangleTree.Parse(this.ToString()); return(clone); }