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; } };