単語がグリッドに存在する場合、2Dボードや単語を考えると、見つけます。
単語は「隣接」セルが水平方向または垂直方向に隣接するもので順次隣接するセルの文字から構成することができます。同じ文字セルを複数回使用することはできません。
例:
ボード=
[
[ 'A'、 'B'、 'C'、 'E']、
[ 'S'、 'F.'、 'C'、 'S']、
[ 'A'、 'D'、E」 「」E「]が
] 与えられた単語= 『ABCCEDは』、trueに戻ります。与えられた単語= 『SEE』を、trueに戻ります。与えられた単語= 『ABCB』を、falseに戻ります。
他人から借りていくつかのアイデアを検討しているコードの部分で
クラスソリューション: DEF存在する(セルフ、ボード:リスト[リスト[STR]、ワード:STR) - > BOOL: MAX_ROW = LEN(ボード)-1 max_col。= LEN(ボード[0]) - 1 DEF バックトラック(行、 COL、S): IF LEN(S)== 0: 返す真 LOCSの。。。= [行×1、COL]、[+行1、COL]、[行、-col 1]、[行、+ COL 1。] ] #の解析であれば、DFSはTrueを返すことができる場合にtrueを返しができるように、上下ているポイント のために LOC にLOCS: IF LOC [0] <0 または LOC [0]> MAX_ROW または。LOC [1] <0 または[1]のLOC> max_col やボード[LOC [0] = [LOCの[1]。]!S [0]: 続行 #のリファレンス他のコード、非アルファベット文字に現在の位置を、使用されて表し [TMP =ボードLOC [0]] [。LOCの[1 ] 取締役会[LOC [0]] [LOCの[ 1] = " $ " IFバックトラック(LOC [0]、LOCの[1]、S [1。。:]): 返す真 基板[LOC [0] [LOCの[ 1] = tmpに 戻り偽 のための R&LT におけるレンジ(LEN(ボード)) のために C で範囲(LEN(ボード[0])): IF基板[R] [C] == ワード[0]: TMP = ボード[R] [C] 基板[R] [C] = " $ " もしバックトラック(R、C、ワード[1 :]): 返す真の 基板[R] [C] = TMP 戻り偽