使用递归的文本扭曲游戏

Text Twist game using recursion

本文关键字:游戏 文本 递归      更新时间:2023-10-16

我正在编写一个在C++中使用递归的文本扭曲游戏。首先,我有一个Trie类(包含一个TrieNode类)可供使用。我的程序首先从字典中加载单词并将它们存储在 Trie 对象中。然后它将提示用户输入一个 7 个字母的单词。阅读完所有字母后,我需要使用递归来查找加载字典(Trie)中单词的所有可能字母组合。然后将这些可能的单词存储在另一个 Trie 中,并在以后打印出来。每个可能的单词必须至少有 3 个字母长,并且必须在字典中。

卡在需要编写递归函数来搜索单词的地方,因为不知何故,我看不到在这种情况下如何应用递归。有人可以给我一个提示吗?我不需要全面的代码;我只需要有人为我点亮那个小灯泡,这样我就会知道从哪里开始。多谢!

附言我也对回溯和 8-Queen 问题进行了研究,但我仍然感到困惑......

这是我的主要程序:

void findWord(int i, const string &word, const Trie&lexion){
    //My question is, what should the base case be?
    //I'm a bit clueless: if I start with this:
    //if(word.length()<=1){
    //      return true;
    //  }
    //  else{
    //      return findWord(i,word.substr(1,word.length()),lexion);
    //  }
    //I know this doesn't make sense; but I'm really lost and don't know where to start.
}
void main(){
    string word;
    Trie lexion = Trie();
    lexion.loadFromFile("ospd.txt");
    word = getWord();//get word from the user
    for (size_t i = 3; i <= 7; i++){
        findWord(i,word,lexion);
    }
}
基本上,

你想把问题分成"我可以做一个以这个字母开头的单词吗?"然后递归下降Trie来解决"如果我从这个字母开始,我可以使用这些字母的其余部分的子集在这个节点上创建一个单词吗?",然后将结果转换为更大问题的结果, "从这个trie的根开始,我能从这个字符串中发出什么词?"

你的递归函数应该接受一个字母列表(或向量)和一个对TrieNode的引用,并应该返回使用该TrieNode作为根存在的可能单词的列表。

终止条件是到达叶节点,其中返回一个包含单个空字符串的列表,这表示您找到了一个单词。递归部分是遍历单词中所有剩余的字母,看看其中是否有任何字母可以成为单词的一部分,并递归地检查每个字母(对不起,这真的很难正确措辞......

一些伪代码:

list recursiveFind(list input, node curNode)
    if curNode has no children
        // we found a word!
        return list containing ("") (so the caller knows we found a result instead of failing)
    else
        results = empty list
        foreach letter in list
            if find a node where value == letter 
            recursive_results = recursiveFind(input except for that letter, that node you just found)
            foreach result in recursive_results
                push (letter + result) into results
         return results

我希望这有帮助!