[パス] 12 - 安全オファー行列を証明

トピック:

マトリックス内の文字列のすべての文字を含むルートがあるかどうかを決定する機能を設計してください。
格子パスはマトリックスのいずれかから開始することができる、行列の各ステップは、1つのグリッド上下、左右することができます。
1つのグリッドの行列による1つのパスした場合、次のように再びグリッドを入力することはできません。
そのようなabcesfcsadee例えば3×4マトリクスの文字列に「bcced」パスを含む、しかし、パス「ABCB」マトリクスを含まない
最初の文字列が第二格子状に行列Bの最初の行を占有するのでその後、パスが再びグリッドを入力することはできません。

 アイデア:

バックトラック:次のターゲットが見つからない場合、それは目標を見つけるために背面に落ちます。

1)Aの最初の文字のパスを見つけ、マトリックスを横断します

2)次にか文字を見つけるために、文字Aの最初の文字、第二経路について上下に横切ると。

  そして、同じ文字列str内の次の文字は、次の文字を(次のトラバース開始点)としてその文字を置く場合

  そうでない場合は、文字の上にフォールバックする必要があり、再度反復を。

  重なり合うパスを避けるために、我々は、記録パスboolmatrix状況に補助行列を[]が必要です。

次のコードと、4つの隣接する格子からのような下付き文字の経路長の格子パス文字列行列座標(行、列)、(行、COL-1)、(行1、COL )、(行、列+ 1)及び経路長+ 1の添え字の文字列を検索するパスに(行+ 1、COL)。

隣接する4つのグリッドは、マトリックス内の文字列の添字の文字の光路長の位置に現在のパスが正しくないことを示す文字列の添字文字光路長+ 1を、一致しなかった場合、我々は、文字列の前に戻って行く必要がありますその後(経路長-1)、及び再配置。

すべての文字がマトリクス状に位置する文字列形式(この場合STR [路長] ==「\ 0」)を見つけるために、経路上にあるまで、このプロセスが繰り返されます。

クラスソリューション:
     デフHASPATH(セルフ、マトリックス、行、colsの、パス
        ):""」
        :Paramの行列:行列の文字
        :Paramの行:行列の行数
        :paramがCOLS:行列の列数
        :Paramのパス:パスを見つける必要
        :リターン:
        ""」
        場合でlen(行列)=行* colsの!または lenは(マトリックス)== 0 または行<= 0 または COLS <= 0 またはパスなし:
             参数校验
            リターン
        boolmatrix = [0] *(*行COLS)  これは、A行列で乗算されるように、 
        光路長= [0]  既に見つかった経路長
        のために Y における範囲(行)
             のために X における範囲(COLS):
                 IF self.findPath(マトリックス、行、colsの、X、Y、パス、パス長、boolmatrix):
                     リターン真の
         リターン

    DEF findPath(自己、マトリックス、行、colsの、X、Y、経路、経路長
        、boolmatrix):""」
        :Paramでは、x:横軸の現在位置が(列の数に対応しました[!])
        :Paramのと:
        究極のパス:
        :Paramの光路長:現在のパスの長さを見つけます
        :のParam boolmatrix:ブールマトリクスアレイ、アレイのアクセスフラグ、パスの文字:位置が真標識され
        :リターン:
        「」 " 
        IF路長[0] == LEN(パス):
            電流経路は、文字列の長さに等しい長さを有し、見つけるために行われていたすべて
            のリターン真を
        nextPath = Falseの
         #のパラメータ校正:1、もはや位置座標の数よりもランク
        2を、文字位置に対応するキャラクタの現在位置が経路に等しくない
        3、現在位置は、現在で見出さパスに存在しない
        IF 0 <= X <COLS そして 0 <= Y <行\
            行列[Y * colsの+ X] ==パス[路長[0] \
             ない boolmatrix [Y * colsの+ X]:
            boolmatrix [Y * colsの+ X] = 
            経路長[0] + 1 =。
            が周りを探し、次の文字 
            nextPath = self.findPath(マトリックス、行、COLS、X - 1、Y、経路、経路長、boolmatrix)または\
                       self.findPath(マトリックス、行、colsの、X + 1、Y、経路、経路長、boolmatrix)または\
                       self.findPath(マトリックス、行、colsの、X、Y - 1、経路、経路長、boolmatrix)または\
                       self.findPath(マトリックス、行、colsの、X、Y + 1。 パス、パス長、boolmatrix)
             IF  ないnextPath:
                、対応する位置ブールフラグ配列にその文字バックがfalseにラベル付けされている見つけることができませんでした 
                光路長[0 ] - = 1 
                boolmatrix [Y * colsの+ X] = Falseの
         戻り nextPath

 問題が発生しました:

1ヒント:範囲外の文字列インデックス 

  理由:findPath、xおよびyは、現在見て表す文字は、緯度、経度、しかし!横軸はパラメータが決定された列の数を表し、それはX <COLSであるべきで、横軸の値がより少ない列数よりも

おすすめ

転載: www.cnblogs.com/RebeccaG/p/12097562.html