コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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;
     }
 }
コード例 #3
0
        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);
        }