単語がグリッドに存在するかどうかを調べるために、二次元のグリッドと言葉を与えられました。
単語、隣接するセル内の文字のアルファベット順に構成する必要があり、水平方向または垂直方向に隣接するセルに隣接している「隣接」セル。同じセル内の文字を再利用することを許可されていません。
例:
ボード=
[
[ 'A'、 'B'、 'C'、 'E']、
[ 'S'、 'F'、 'C'、 'S']、
[ 'A'、 'D'、E ' 」、 'E']
]
与えられた単語= "ABCCEDは"、trueを返します。
単語= "SEE"を考えると、trueを返します。
単語= "ABCB"を考えると、falseを返します。
1 クラスの解決策: 2 # (X-1、Y) 3 #(X、Y-1)(x、y)と(X、Y + 1) 4 # (X + 1、Y) 5つの 方向=を(0、 -1)、( - 1,0)、(0,1)、(1 、0)] 6 DEF存在(自己、ボード:リスト[リスト[STR]、単語:STR) - > BOOL: 7 M = (基板)lenを 8 であれば、m個の== 0 9 リターン偽 10 N = LEN(ボード[0]) 11 12 = [[FALSEマーク用 _ 中範囲(N)] のため_ でレンジ(M)] 13である #1 スクラッチから各グリッドの検索 14 のための I におけるレンジ(M): 15 用の J でレンジ(N): 16 IF自己。__Search_word (ボード、ワード、0、I、J 、マーク、M、N-) 。17 リターン真 18が 戻り偽 19。 DEFの __search_word (セルフ、ボード、ワード、指数、start_x、start_y、マーク、M、N-): 20 #再帰終了条件書き込む 21は、 IFインデックス== LEN (ワード)-1 : 22であり、 リターンボード[start_x] [start_y] ==Wordの[インデックス] 23 #試合の途中、探し続けるために 24 IFボードは、[start_x] [start_y] == Wordの[インデックス]: 25 #この位置を占めるように、検索が失敗し、その後、解放する 26 [start_x] [マークをstart_y] = Trueの 27 のための方向にself.directions: 28 新しいx + = start_x 方位[0] 29 。new_yのstart_y +方向= [1 ] 30 ##注:検索語が成功した場合、戻り 31は IF 0 <=新しいx <M 及び 0 <= new_y <N- 及び ません [新しいx] [new_y]マークそして、自己。__search_word(ボード、ワード、指数+ 1 、新しいx、new_y、マークされた、M、N): 32 リターン真 33 マーク[start_x] [start_y] = 偽 34 リターン偽