public void Find(TireNode node, string word, int x, int y, bool[,] visited)
        {
            if (node.IsEndOfWord)
            {
                this.m_Result.Add(word);
            }
            visited[x, y] = true;
            for (int xp = x - 1; xp <= x + 1 && xp < m_NumOfRows; xp++)
            {
                for (int yp = y - 1; yp <= y + 1 && yp < m_NumOfColums; yp++)
                {
                    if (xp == x && yp == y)
                    {
                        continue;
                    }

                    if (xp >= 0 && yp >= 0 && visited[xp, yp] == false)
                    {
                        int _InnerIndex = this.m_Boggle[xp, yp] - 'A';
                        if (node.ChildrenNodes[_InnerIndex] != null)
                        {
                            Find(node.ChildrenNodes[_InnerIndex], word + this.m_Boggle[xp, yp], xp, yp, visited);
                        }
                    }
                }
            }

            visited[x, y] = false;
        }
        public void Insert(string key)
        {
            TireNode _StartingNode = RootNode;

            for (int i = 0; i < key.Length; i++)
            {
                char _Char  = Convert.ToChar(key.Substring(i, 1));
                int  _Index = _Char - 'A';
                if (_StartingNode.ChildrenNodes[_Index] == null)
                {
                    _StartingNode.ChildrenNodes[_Index] = new TireNode(_Char);
                }

                _StartingNode = _StartingNode.ChildrenNodes[_Index];
            }
            _StartingNode.IsEndOfWord = true;
        }
 public BoggleAlgorithmUsingTire()
 {
     RootNode     = new TireNode(' ');
     m_Result     = new List <string>();
     m_Dictionary = new string[] { "GEEKS", "FOR", "QUIZ", "GO" };
     m_Boggle     = new char[, ] {
         { 'G', 'I', 'Z' },
         { 'U', 'E', 'K' },
         { 'Q', 'S', 'E' }
     };
     m_NumOfRows   = this.m_Boggle.GetLength(0);
     m_NumOfColums = this.m_Boggle.GetLength(1);
     foreach (string s in m_Dictionary)
     {
         Insert(s);
     }
 }
        public bool Search(string key)
        {
            TireNode _StartingNode = RootNode;

            for (int i = 0; i < key.Length; i++)
            {
                char _Char  = Convert.ToChar(key.Substring(i, 1));
                int  _Index = _Char - 'a';
                if (_StartingNode.ChildrenNodes[_Index] != null)
                {
                    _StartingNode = _StartingNode.ChildrenNodes[_Index];
                }
                else
                {
                    return(false);
                }
            }

            return(_StartingNode.IsEndOfWord);
        }