C++ Boggle游戏的实现并不能得到所有的文字

C++ Boggle游戏的实现并不能得到所有的文字,c++,algorithm,boggle,C++,Algorithm,Boggle,我把电路板读成一个向量char向量B就是4x4电路板 将“排序”字典读入字符串向量 我扫描4x4电路板,为每个单元调用fillGoodWoods函数 int main(int argc, char *argv[]) { if ( argc < 3 ) { std::cout << "\n usage : ./boggle boardfile dictionaryfile "; return 1; }

我把电路板读成一个向量char向量B就是4x4电路板 将“排序”字典读入字符串向量 我扫描4x4电路板,为每个单元调用fillGoodWoods函数

    int main(int argc, char *argv[])
    {
    if ( argc < 3 )
    {
        std::cout << "\n usage : ./boggle boardfile dictionaryfile ";
        return 1;
    }
    // B is the 4x4 board
    boggle::board B;
    // this function reads the board fine
    boggle::read_board(argv[1], B);
    // read the 'sorted' dictionary into a vector
    std::vector<std::string> dict;
    boggle::read_dictionary(argv[2], dict);
    int bsize = B.size();

    std::map<std::string, unsigned int> goodwords;

    for ( unsigned int i = 0; i < bsize; ++i )
    {
        for ( unsigned int j = 0 ; j < bsize ; ++j)
        {
            std::vector<std::vector<bool> > marked;
            for (unsigned int z = 0; z < bsize; z++)
            {
                marked.push_back(std::vector<bool>(bsize, false));
            }
            std::string pathStr ;
            pathStr += B[i][j];
            marked[i][j] = true; // mark visited
            fillGoodwords(i, j, goodwords, marked, pathStr, dict, B);
        }
    }
    std::map<std::string, unsigned int>::iterator itr;


    for ( itr = goodwords.begin(); itr != goodwords.end(); ++itr)
    {
        //std::cout << itr->first << "\n";
    }
    return 0;
}
intmain(intargc,char*argv[])
{
如果(argc<3)
{

std::cout您可以在停止递归之前将单元格标记为已访问,这样就不能在同一单词中使用两次。但在递归返回后,必须清除单元格中的“兄弟”路径:

marked[startrow + x][startcol + y] = true; // mark as visited
fillGoodwords(startrow + x , startcol + y, goodwords, marked, currentStr + B[startrow + x][startcol + y], dict, B);
marked[startrow + x][startcol + y] = false; // clear again for other paths
举例说明:

S O C K
T P X Y
A H Z E
O W N T

如果你从
S
开始,向东走到
O
你最终会找到
SOCK
。递归返回到
S
,然后你探索南部的单元格。你找不到
STOCK
STOP
,因为
O
仍然被标记为可见。

你将单元格标记为在重现之前访问过的单元格g down,以便不能在同一个单词中使用两次。但在递归返回后,必须清除“同级”路径的单元格:

marked[startrow + x][startcol + y] = true; // mark as visited
fillGoodwords(startrow + x , startcol + y, goodwords, marked, currentStr + B[startrow + x][startcol + y], dict, B);
marked[startrow + x][startcol + y] = false; // clear again for other paths
举例说明:

S O C K
T P X Y
A H Z E
O W N T

如果你从
S
开始,向东走到
O
你最终会找到
SOCK
。递归返回到
S
,然后你探索南部的单元格。你找不到
STOCK
STOP
,因为
O
仍然被标记为可见。

你将单元格标记为在重现之前访问过的单元格g down,以便不能在同一个单词中使用两次。但在递归返回后,必须清除“同级”路径的单元格:

marked[startrow + x][startcol + y] = true; // mark as visited
fillGoodwords(startrow + x , startcol + y, goodwords, marked, currentStr + B[startrow + x][startcol + y], dict, B);
marked[startrow + x][startcol + y] = false; // clear again for other paths
举例说明:

S O C K
T P X Y
A H Z E
O W N T

如果你从
S
开始,向东走到
O
你最终会找到
SOCK
。递归返回到
S
,然后你探索南部的单元格。你找不到
STOCK
STOP
,因为
O
仍然被标记为可见。

你将单元格标记为在重现之前访问过的单元格g down,以便不能在同一个单词中使用两次。但在递归返回后,必须清除“同级”路径的单元格:

marked[startrow + x][startcol + y] = true; // mark as visited
fillGoodwords(startrow + x , startcol + y, goodwords, marked, currentStr + B[startrow + x][startcol + y], dict, B);
marked[startrow + x][startcol + y] = false; // clear again for other paths
举例说明:

S O C K
T P X Y
A H Z E
O W N T

如果你从
S
开始,向东到
O
你最终会找到
SOCK
。递归返回到
S
,然后你探索南部的单元格。你找不到
STOCK
STOP
,因为
O
仍然标记为可见。

它找不到什么单词?长单词?Short单词?如果一个单词的一部分本身就是一个完整的单词,这可能是一个问题吗?(例如,“Train”和“Trainer”如果两者都可用,它会识别这两个词吗?)另外,可能会帮助你解决问题。我不能像train trainer那样将问题分为子词和词。这是一个词的组合,Moehm发现了问题。它找不到什么词?长词?短词?一个词的一部分本身就是一个完整的词吗?(即“train”和“trainer”)如果两者都可用,它会识别这两个词吗?)另外,可能会帮助你解决问题。我不能像train trainer那样将问题分为子词和词。这是一个词的混合体,Moehm发现了问题。它找不到什么词?长词?短词?一个词的一部分本身就是一个完整的词,这可能是一个问题吗。“培训”和“培训师”如果两者都可用,它会同时识别它们吗?)另外,可能会帮助你解决问题。我不能像train trainer那样将问题分为子词和词。这是一个词的组合,Moehm发现了问题。它找不到什么词?长词?短词?一个词的一部分本身就是一个完整的词吗?(即“train”和“trainer”)“如果两者都可用,它会同时识别吗?”)此外,可能会帮助您解决问题。我无法像train trainer那样将问题分为子词和词。这是一个词的混合体,而M Oehm发现了问题。