public static FrogNode CreateFrogNodeTree(int numberOfFrogs) { FrogNode root = new FrogNode(numberOfFrogs); root = FrogNode.CreateFrogPossibilities(root); return(root); }
static FrogNode CreateFrogPossibilities(FrogNode node) { if (node.ZeroPos - 1 >= 0 && node.Frogs[node.ZeroPos - 1] == '>') { FrogNode newNode = new FrogNode(node); newNode.ZeroPos = node.ZeroPos - 1; newNode.Frogs[node.ZeroPos] = '>'; newNode.Frogs[newNode.ZeroPos] = '_'; node.Nodes.Add(newNode); } if (node.ZeroPos - 2 >= 0 && node.Frogs[node.ZeroPos - 2] == '>') { FrogNode newNode = new FrogNode(node); newNode.ZeroPos = node.ZeroPos - 2; newNode.Frogs[node.ZeroPos] = '>'; newNode.Frogs[newNode.ZeroPos] = '_'; node.Nodes.Add(newNode); } if (node.ZeroPos + 1 < node.Frogs.Count && node.Frogs[node.ZeroPos + 1] == '<') { FrogNode newNode = new FrogNode(node); newNode.ZeroPos = node.ZeroPos + 1; newNode.Frogs[node.ZeroPos] = '<'; newNode.Frogs[newNode.ZeroPos] = '_'; node.Nodes.Add(newNode); } if (node.ZeroPos + 2 < node.Frogs.Count && node.Frogs[node.ZeroPos + 2] == '<') { FrogNode newNode = new FrogNode(node); newNode.ZeroPos = node.ZeroPos + 2; newNode.Frogs[node.ZeroPos] = '<'; newNode.Frogs[newNode.ZeroPos] = '_'; node.Nodes.Add(newNode); } foreach (FrogNode child in node.Nodes) { FrogNode.CreateFrogPossibilities(child); } return(node); }