private void BuildWord(WordNode wordNode, int x, int y) { if (wordNode == null) return; if (wordNode.EndOfWord) _possibleWords.Add(wordNode.Word); IEnumerable<Move> possibleMoves = GetPossibleMoves(x, y); foreach (Move move in possibleMoves) { int nodeIndex = _scrambleBoard[move.X, move.Y].ToNodeIndex(); BuildWord(wordNode.ChildNodes[nodeIndex], move.X, move.Y); } }
public void BuildDictionary(string dictionaryFile) { RootNode = new WordNode(); try { using (var reader = new StreamReader(dictionaryFile)) { string line; while ((line = reader.ReadLine()) != null) { ProcessNode(RootNode, new Stack<char>(line.Trim()), new Stack<char>()); } } } catch (IOException exception) { exception.Data.Add("Exception detail", "Error processing dictionary file"); throw; } }
internal void ProcessNode(WordNode wordNode, Stack<char> remainingCharacters, Stack<char> processedCharacters) { if (remainingCharacters.Count == 0) { wordNode.EndOfWord = true; wordNode.Word = new string(processedCharacters.ToArray()); return; } int nodeIndex; do { char character = remainingCharacters.Pop(); processedCharacters.Push(character); nodeIndex = character.ToNodeIndex(); } while (nodeIndex < wordNode.ChildNodes.GetLowerBound(0) || nodeIndex > wordNode.ChildNodes.GetUpperBound(0)); if (wordNode.ChildNodes[nodeIndex] == null) wordNode.ChildNodes[nodeIndex] = new WordNode(); ProcessNode(wordNode.ChildNodes[nodeIndex], remainingCharacters, processedCharacters); }