トピック:
単語がグリッドに存在する場合、2Dボードや単語を考えると、見つけます。
単語は「隣接」セルが水平方向または垂直方向に隣接するもので順次隣接するセルの文字から構成することができます。同じ文字セルを複数回使用することはできません。
例:
ボード= [ [ 'A'、 'B'、 'C'、 'E']、 [ 'S'、 'F'、 'C'、 'S']、 [ 'A'、 'D'、E ' 」、 'E'] ] 指定した単語= "ABCCED"、trueを返します。 単語= "SEE"を考えると、trueを返します。 単語= "ABCB"を考えると、falseを返します。
分析:
単語がグリッドに存在するかどうかを調べるために、二次元のグリッドと言葉を与えられました。
単語、隣接するセル内の文字のアルファベット順に構成する必要があり、水平方向または垂直方向に隣接するセルに隣接している「隣接」セル。同じセル内の文字を再利用することを許可されていません。
各要素におけるトラバースボードを見つけるアルファベット順に与えられた単語に応じて除く、迷路に幾分類似タイトルサーチ、および単語の最初の文字の判定は、現在位置の検索の場合、同じ上下、同じです要素は、隣接するセルであり、次の文字が現在文字と同じであり、文字は、またはではない文字の数が検索語長に等しい偽異なる戻りの探索範囲において、その単語がボードに見られることを示しています。再利用文字を防ぐために、各文字が検索の現在位置マークであると判断されることに注意してください。私はそれに戻ってきて、検索の最後で、その後の判決で位置を決定するために、これを繰り返さないように、直接、ボードの要素を変更することを選択しました。
手順:
クラス解決{ パブリック: BOOL存在する(ベクトル<ベクトル< チャー >>&ボード、文字列の単語){ H = board.size()。 W =ボード[ 0 ] .size()。 以下のために(int型 i = 0 ; iはH <; iは++ ){ ための(int型 J = 0 ; ++、J <W {j)の 場合(searchexist(ボードは、ワードは、0、i、j)は)戻り 真。 } } リターン 偽; } INT searchexist(ベクトル<ベクトル< チャー >>&ボード、ストリング・ワード、整数 nは、INTのx、int型のY){ 場合(X < 0 || X> H- 1 || Y < 0 || Y> W- 1つの!||ワード[N] = ボード[X] [Y]) 戻り 0 。 もし(N == word.length() - 1 ) リターン 1 。 チャー TEMP = ボード[X] [Y]。 基板[X] [Y] = 0; int型フラグ= searchexist(ボード、ワード、N + 1、X + 1 、Y) || searchexist(ボード、ワード、N + 1、X- 1 、Y) || searchexist(ボード、ワード、N + 1、X、Y + 1 ) || searchexist(ボード、ワード、N + 1、X、Y- 1 )。 基板[X] [Y] = TEMP。 リターンフラグ。 } プライベート: int型H、W。 }。