私はあなたのおばあちゃんに初めてのJava単語検索プログラムを書く時が来ました。しかし、彼女にレターグリッド内の言葉を探してすべての仕事をさせる代わりに、再帰的な関数4WaySearch
が彼女のためにそれを行います!再帰的な単語検索アルゴリズム
唯一の問題は、次のとおりです。
私はそれは難しい一度にグリッドに置く起動したとき、すべての可能な文字の組み合わせを構築する再帰アルゴリズムを概念化するために見つけています。
が/*
* This is the method that calls itself repeatedly to wander it's way
* through the grid using a 4 way pattern,
* creating every possibly letter combination and checking it against a
* dictionary. If the word is found in the dictionary, it gets added to a
* collection of found words.
*
* Here an example of a 3x3 grid with the valid words of RATZ and BRATZ, but
* the word CATZ isn't valid. (the C is not tangent to the A).
*
* CXY
* RAT
* BCZ
*
* @param row Current row position of cursor
* @param col Current column position of cursor
*/
private void 4WaySearch(int row, int col) {
// is cursor outside grid boundaries?
if (row < 0 || row > ROWS - 1 || col < 0 || col > COLS - 1)
return;
GridEntry<Character> entry = getGridEntry(row, col);
// has it been visited?
if (entry.hasBreadCrumb())
return;
// build current word
currentWord += entry.getElement(); // returns character
// if dictionay has the word add to found words list
if (dictionary.contains(currentWord))
foundWords.add(currentWord);
// add a mark to know we visited
entry.toggleCrumb();
// THIS CANT BE RIGHT
4WaySearch(row, col + 1); // check right
4WaySearch(row + 1, col); // check bottom
4WaySearch(row, col - 1); // check left
4WaySearch(row - 1, col); // check top
// unmark visited
entry.toggleCrumb();
// strip last character
if (currentWord.length() != 0)
currentWord = currentWord.substring(
0,
(currentWord.length() > 1) ?
currentWord.length() - 1 :
currentWord.length()
);
}
が私の頭の中で、私は、再帰的なツリーtraveralアルゴリズムなどの検索アルゴリズムを可視化しますが、各ノード(:ここ
は、私はすでに、私は正しい方向への大きな一歩を考えることを書かれているコードですこのケースではエントリ)には4つの子(正接のエントリ)があり、リーフノードはグリッドの境界です。
また、機能への最初の進入時にカーソルの位置は、ここでpsuedocodedループのためのシンプルで決定されます。私は今、しばらくの間、これについて考え、そして異なるアプローチをしようとしている
for (int r = 0; r < ROWS; r++)
for (int c = 0; r < COLS; c++)
4WaySearch(r,c);
end for;
end for;
。 ..しかし、私はまだそれの周りに私の心を包み込み、それを動作させるように見える。誰かが私に光を見せてくれますか? (私とあなたのおばあちゃんのために:D)
これは宿題に関する質問ですか? – ewok
なぜあなたは宿題を再帰的にやりたいのですか? – Kevin
あなたはCATZが有効ではないと言っていますが、なぜ最下行のCで始めることができませんか?その後、それは有効であるようです。 –