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

标签 c boggle

这是 Boggle Board 的 C 作业。

作业是在 4x4 的字符板上搜索字典中的单词,方法是从一个图 block 开始并在任意点向上、向下、向左、向右或沿对角线移动。我的程序从一点“跳”到另一点,从不相邻的字母中拼出单词,并多次添加单词。

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;
    }
}

最佳答案

您没有在此处发布足够的代码来实际测试它,但在我看来您的重复问题源于您在添加之前检查字典中是否有单词从当前方 block 到当前单词的字母。现在代码的编写方式,看起来每个匹配的单词都会被“添加”(打印?)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 ***/
}

我没有看到任何明显的错误会导致您的“跳跃”问题。

关于c - 在 4x4 的字符板上搜索字典中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850417/

相关文章:

java - 运行 Boggle Solver 需要一个多小时才能运行。我的代码有什么问题吗?

c - 这个数组错误是什么意思?

c - 使用 %ld 转换说明符在 C 中打印 double 类型

C 程序 fscanf 跳过行

c++ - 在 Trie 中引入数据的最佳方式? (C++)

java - 搜索数组中的单词

algorithm - 在我的递归方法中继续越界以导航并查找 4X4 矩阵中的所有字母组合

c - 函数指针和函数地址

c - 在以下脚本中使用 IN 和 OUT 状态需要什么?

python - 从 python 中的随机输入字母中查找单词。使用什么算法/代码已经存在?