- 标准回溯解法
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix char字符型vector<vector<>> * @param word string字符串 * @return bool布尔型 */ bool hasPath(vector<vector<char> >& matrix, string word) { // write code here for(int i = 0; i< matrix.size(); i++){//入口 for(int j = 0; j< matrix[0].size();j++){ if(dfs(matrix,word,i,j,0)){ return true; } } } return false; } bool dfs(vector<vector<char> >& matrix, string word, int i, int j, int index){ //base case - 1 欲判断-取决于题目(如果出了边界,且当前单词得不等于现在矩阵对应的单词,reture false,否则继续回溯) if(i<0||i>=matrix.size() || j<0||j>=matrix[0].size() || matrix[i][j] != word[index]){ return false; } //base case - 2 最终判断,取决于预判断 if(index == word.size()-1){ return true; } //开始回溯 char tmp = matrix[i][j];//先把你给存起来 matrix[i][j] = '.'; //以选择,以访问 bool res = dfs(matrix,word,i,j+1,index+1) || dfs(matrix,word,i,j-1,index+1) || dfs(matrix,word,i+1,j,index+1) || dfs(matrix,word,i-1,j,index+1); //复原 matrix[i][j] = tmp; return res; //统一判断 } };