パスのマトリックス

1つの後戻り

クラスのソリューション{
 パブリックBOOL HASPATH(CHAR *マトリックス、int型の列、int型 colsのを、char型 * STR)
    { 
     IF(STRマトリックス== == NULL NULL || ||行<= 0 || COLS <= 0 の戻り をfalseに;
      INT行= 0 ;
      int型 COL = 0 ;
      BOOLは * =訪問新しい新しい BOOL [行COLS *];   // 新たな新しいマトリックスを、ポインタを返し、それぞれのノードかどうかを検出する; 
     のmemset(、訪問0を、行*COLS);
      INT経路長= 0 ; // 位置ストリング
     のため(行= 0、行<行、行++ 
       { 
          ため(COL = 0 COL <COLS; COL ++ 
          { 
             IF(hasPathCore(マトリックス、行、COLS 、行、COL、STRは、))、経路長を訪問// 経路探索が成功した場合
             、{
                戻り  trueに; 
             } 
          } 
       } 
       削除[]訪問;
        戻り  falseに; 
    } 
  パブリックBOOL hasPathCore(CHAR *マトリックス、INT行は、int型 COLS、int型の行、int型 COL、チャーを * STR、BOOL *訪問、INT経路長)は
     { 
      BOOLの HASPATHは= falseに;
       // ポインタ単語は、上記非NULLポインタを検証した   
      IF(STR [経路長] == \ 0 // ヌル文字が位置にある場合   
      、{
          リターン 真へ; 
      } 
      // 各機能レーンに限定する必要                                                  // アクセスされない
      場合(行> = 0 &&行<行&& COL> = 0 && COL <COLS &&行列[COL +行* COLS] == STR [路長] &&訪問[COL +行* COLS] == 
      { 
         路長 ++。// 先向前走を 
         訪問[COL +行* COLS = // 围绕该点的上下左右找看有无和パス相对应的值 
          HASPATH =(hasPathCore(マトリックス、行、COLS、行優先1、COL、STR、経路長を訪問)||        
                   hasPathCore(マトリックス、行、COLS 、行 + 1、COL、STR、訪問経路長)|| 
                   hasPathCore(マトリックス、行、colsの、行、列 - 1、STRは、)経路長、訪問||
                   hasPathCore(マトリックス、行、colsの、行、COL + 1 )、strが、光路長を訪問した);
          IF(HASPATH)!// パスが見つからない場合は、   // 我々はロールバック
         { 
          光路長 - ; // ロールバック 
          訪れた[COL +行* colsの] =  ; // 私はここに訪れていない
         } 

      
      } 
         戻りHASPATH; 
  } 


};

 

おすすめ

転載: www.cnblogs.com/cgy1012/p/11373329.html