所以我正在研究java中的Boggle程序,我无法找到所有可能的单词。
它几乎找到了所有这些,但对于我的生活,我无法弄清楚为什么它不会全部得到它们。
private void findWords( TreeSet<String> foundWords, String word, Tile t ){
int i=t.getRow();
int j=t.getCol();
//Make sure the tile isn't visited
if(visited[i][j]) return;
//Set the current tile to visited
visited[i][j]=true;
//Decide what the current word is
if(t.getLetter().equalsIgnoreCase("q")) word=word+"qu";
else word=word+t.getLetter();
//If the string is a word
if(Boggle.dictionary.search(word)==1){
//If the word length is greater than or equal to the prefix length
if(word.length()>=Dictionary.prefixLength){
//If the word has not already been found
if(!foundWords.contains(word)){
//Add the word to the found list
foundWords.add(word);
}
}
}
//Recurse through all neighbor tiles
for(int curRow=0; curRow<=nRows; curRow++){
for(int curCol=0; curCol<=nCols; curCol++){
//Make sure it is not out of bounds
if((i+curRow<nRows)&&(j+curCol<nCols)){
findWords(foundWords, word, board[i + curRow][j + curCol]);
findWords(foundWords, word, board[i - curRow][j - curCol]);
findWords(foundWords, word, board[i + curRow][curCol]);
findWords(foundWords, word, board[i - curRow][curCol]);
findWords(foundWords, word, board[curRow][j + curCol]);
findWords(foundWords, word, board[curRow][j - curCol]);
findWords(foundWords, word, board[i + curRow][j - curCol]);
findWords(foundWords, word, board[i - curRow][j + curCol]);
}
}
}
//Reset the tile to be not visited
visited[i][j] = false;
}
这是有问题的方法;它以递归方式在Boggle板上找到单词。
任何人都有任何想法为什么它只找到约75%的单词?
如果需要,我可以添加更多代码。
答案 0 :(得分:1)
我建议编写一些测试用例 - 我总是发现这样做会立即发现问题,或者至少允许您使用调试器逐步执行代码,并找出现实与您的期望不同的地方。
编辑:另外,你的两个for循环看起来很奇怪。你不应该在每个方向上看-1.0和1的偏移(并且折扣0,0),而不是0 - &gt; NROWS?看起来你只是朝着一个方向看。