在字典中搜索4x4字符板中的单词

时间:2015-11-22 00:49:26

标签: c boggle

这是一个博格板的C分配。

分配是通过从一个图块开始并在任何点向上,向下,向左,向右或对角移动来搜索字典中的单词的4x4字符板。我的节目"跳跃"从一个点到另一个点,从不相邻的字母拼写单词,并多次添加单词。

void goToNextLetter(struct trie* dictionary, char boggleBoard[SIDELENGTH][SIDELENGTH], int usedLetters[SIDELENGTH][SIDELENGTH], char word[MAX], int row, int column){
    int i, rowTemp, colTemp;
    if (isPrefix(dictionary, word, 0)){
        if (isInDictionary(dictionary, word, 0)){
            printf("%s\n", word);
        }
        word[strlen(word)]=boggleBoard[row][column];
        usedLetters[row][column]=1;
        //printf("%d\t%d\t%s\n", row, column, word);
        for (i=0; i<D_SIZE; i++){
            rowTemp=row+DY[i];
            colTemp=column+DX[i];
            if ((rowTemp<SIDELENGTH) && (rowTemp>=0) && (colTemp>=0) && (colTemp<SIDELENGTH) && (usedLetters[rowTemp][colTemp]==0)){
                goToNextLetter(dictionary, boggleBoard, usedLetters, word, rowTemp, colTemp);
            }
        }
        //remove the last letter of word
        word[strlen(word)-1] = 0;
        usedLetters[row][column]=0;
    }
}

2 个答案:

答案 0 :(得分:2)

你没有在这里发布足够的代码来实际测试这个,但在我看来,你的重复问题源于你在之前检查一个单词是否在字典中您将当前方块中的字母添加到当前字词。现在编写代码的方式,看起来每个匹配的单词将被添加&#34;添加&#34; (打印?)D_SIZE次......

换句话说,您应该将条件限制的更新word / usedLetters代码移到之外:

void goToNextLetter(struct trie* dictionary, char boggleBoard[SIDELENGTH][SIDELENGTH], int usedLetters[SIDELENGTH][SIDELENGTH], char word[MAX], int row, int column){
    int i, rowTemp, colTemp;
    /*** START HOISTED CODE ***/
    word[strlen(word)]=boggleBoard[row][column];
    usedLetters[row][column]=1;
    /*** END HOISTED CODE ***/
    if (isPrefix(dictionary, word, 0)){
        if (isInDictionary(dictionary, word, 0)){
            printf("%s\n", word);
        }
        //printf("%d\t%d\t%s\n", row, column, word);
        for (i=0; i<D_SIZE; i++){
            rowTemp=row+DY[i];
            colTemp=column+DX[i];
            if ((rowTemp<SIDELENGTH) && (rowTemp>=0) && (colTemp>=0) && (colTemp<SIDELENGTH) && (usedLetters[rowTemp][colTemp]==0)){
                goToNextLetter(dictionary, boggleBoard, usedLetters, word, rowTemp, colTemp);
            }
        }
    }
    /*** START HOISTED CODE ***/
    //remove the last letter of word
    word[strlen(word)-1] = 0;
    usedLetters[row][column]=0;
    /*** END HOISTED CODE ***/
}

我没有看到任何明显的错误会导致你的跳跃&#34;问题

答案 1 :(得分:0)

好吧,我已经弄明白了。不过,这实际上是程序其余部分的一个问题。我将每一行电路板(传递给函数的参数)设置为SIDELENGTH + 1的长度,因为我想为结束字符串字符保留一个空格,但我并不需要它。实际上,我不确定是如何导致这个问题的,但是如果它有效则没问题。感谢大家的帮助!