Esempio n. 1
0
        public List <string> FindAllWords()
        {
            var words         = new SortedSet <string>();
            var lettersInPath = new BitArray(ScrambledWord.Length);

            var searcher = new FlexibleBacktrackingSearch <WordSearchState>(
                state => state.GetChildren(ScrambledWord, lettersInPath),
                true);

            for (int i = 0; i < ScrambledWord.Length; ++i)
            {
                string initialString = ScrambledWord[i].ToString();
                var    initialNode   = Dictionary.FindNode(initialString);

                if (initialNode != null)
                {
                    lettersInPath[i] = true;
                    searcher.Search(
                        new WordSearchState(initialString, initialNode),
                        node =>
                    {
                        if (node.State.IsWord &&
                            node.State.CurrentString.Length >= MinWordLength)
                        {
                            words.Add(node.State.CurrentString);
                        }
                        return(NodeOption.Continue);
                    }
                        );
                    lettersInPath[i] = false;
                }
            }

            return(words.ToList());
        }
Esempio n. 2
0
        public WordSearchState(
            Tile startingTile,
            PrefixTreeDictionary dictionary,
            bool useAlternate = false)
        {
            Validate.IsNotNull(startingTile, "startingTile");
            Validate.IsNotNull(dictionary, "dictionary");

            CurrentString  = useAlternate ? startingTile.AlternateLetters : startingTile.Letters;
            LastTileAdded  = startingTile;
            DictionaryNode = dictionary.FindNode(CurrentString);
        }