2次元配列の文字の検索について
お世話になります。今Boggleゲームというもののプログラムを考えているのですが、配列の検索についてお聞きしたいことがあります。
Boggleゲームは、4×4の正方形のマス1つ1つにアルファベットが書いてあるサイコロが入っており、
縦横斜めから英単語がいくつ出来るかを探して競うゲームです。今回は英単語に限らず、指定した文字列がこのルールで見つけられるかを試します。
もしその文字列がこのルールで見つかればtrue、見つからなければfalseを返します。
例えば、
A B C D
E F G H
I J K L
M N O P
という2次元配列があり、この中からABGLPを探すとすると、AとBは隣り合っており、BとGは斜めで隣り合っており、GとLも斜めで隣、 LとPは上下で隣なので、ABGLPはOKです。
しかし例えばACBを検索すると、CとBは隣り合っていてもAとCは隣り合ってないので、この時点でアウトです。
ちなみに同じ配列のインデックスの文字は2度使えません。例えば、ABCGBを検索すると、隣り合った文字同士なのでOKですが、同じインデックスにあるBを2度使っているのでアウトです。
以上のルールで、文字1つ1つを検索するプログラムを考えているのですが、どのようにすればいいのかがわかりません。
例えばAFCBを検索するとなると、まずAのまわりにFがあるかどうかを検索するので(Aは角なので)、[0][1],[1][0],[1][1]の3つを探せばいいだけですが(この場合は[1][1]=F)、
次にFの周りにCがあるかを検索すると計8つのインデックスの中身を調べなければなりません(この場合は[0][2]=C)。
そして最後にCの周りにBがあるかどうかで計5つのインデックスの中身を調べます(この場合[0][1]=B)。
常にFの検索のように3×3の検索ならfor文2つで簡単に出来ますが、検索する文字によっては角の検索になったり端の列の検索になったりと検索範囲が変わってしまいます。
しかも同じインデックスの中身は2度使えないのでもしそのインデックスにヒットしたら飛ばさなければなりません。
これをどのように検索すればいいのかがわかりません。全ての可能なケースのfor文を用意するとすごい長さになってしまいます。
どなたか宜しくお願いします。
お礼
こんな簡単な事だったんですね!! 迅速な質問ありがとうございます!!