请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。
注意:
- 输入的路径不为空;
- 所有出现的字符均为大写英文字母;
样例
matrix=[ ["A","B","C","E"], ["S","F","C","S"], ["A","D","E","E"]]str="BCCE" , return "true" str="ASAE" , return "false"
想法:回溯法,逐个遍历每一种情况。
class Solution{public:bool hasPath(vector>& matrix, string str) { for(int i = 0 ; i < matrix.size() ; i++){ for(int j = 0 ; j < matrix[i].size(); j++){ if(dfs(matrix, str, 0, i, j)){ return true; } } } return false; }bool dfs(vector >& matrix, string& str, int u, int x, int y){ if(matrix[x][y] != str[u])return false; if(u == str.size() - 1)return true; int dx[4] = { 1, 0 , -1 , 0}; int dy[4] = { 0, 1 ,0 ,-1}; char t = matrix[x][y]; matrix[x][y] = '*'; for(int i = 0 ; i < 4 ; i++){ int a = x + dx[i]; int b = y + dy[i]; if(a >=0 && a < matrixsize() && b >=0 && b < matirx[a].size()){ if(dfs(matrix, str, u+1, x, y)){ return true; } } } matrix[x][y] = t; return false;}}