// 題目:請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有
// 字元的路徑。路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左、右、
// 上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入
// 該格仔。例如在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字
// 母用下劃線標出)。但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個
// 字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。
// a b t g
// c f
c s
// j d e h
這是乙個可以用回溯演算法解決的問題。
首先任選乙個格仔開始走,如果第i次選擇的這個格仔的字元,恰好對應目標字串第i個字元,
可以從這個格仔的上下左右開始嘗試尋找第i+1個字元,找到符合條件的繼續往下走,否則就回退上一步。
(邊邊角角的就沒有四個格仔,相鄰的只有2個或者3個,需要注意判斷)
那麼什麼時候截止呢?當目標字串的字元為'\0'就說明找到了一條路,函式就可以返回了。
由於題目的要求,進入乙個格仔後無法再次進入,所以應該有乙個bool型別的陣列記錄已經組走過的路徑。
bool haspath()
return false;
}bool haspathcore()
}return;
}
bool haspath(const char* matrix, int rows, int cols, const char* str)
} //釋放標記記憶體
delete visited;
return false;
}bool haspathcore(const char* matrix, int rows, int cols, int row, int col,
const char* str, int& pathlength, bool* visited)
} return haspath;
}
劍指offer第二版面試題12
【劍指offer學習】【面試題66:矩陣中的路徑】
posted @
2018-08-07 20:04
朕蹲廁唱忐忑 閱讀(
...)
編輯收藏
面試題12 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用下劃線標出 但...
面試題12 矩陣中的路徑
題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的 3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加...
面試題12 矩陣中的路徑
採用深度優先遍歷的策略,從深度方向進行匹配,如果相等則返回true,否則返回false。像這種遞迴的解法,重要的是要分析出邊界,分析出一次搜尋要做什麼事情。邊界或者返回條件 當前搜尋的字元超越矩陣邊界,或者該字元與word對應字元不相等,同時要求不走相同的路。此時,返回false。如果滿足上述三個條...