题目描述
请设计一个函数,用于判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左、向右、向上、向下移动一个格子。
如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。
注意:
- 输入的路径不为空
- 所有出现的字符均为大写英文字母
样例
matrix =
[
['A','B','C','E']
['S','F','C','S']
['A','D','E','E']
]
Input: "BCCE"
Output: true
Input: "ASAE"
Output: false
解题思路
-
描述
这种问题,就是暴力搜索。
-
实现代码:
// 暴力搜索主体, bool dfs(vector<vector<char> >matrix, string &str, int u, int x, int y) { if (u == str.size()) { return true; } if (matrix[x][y] != str[u]) { return false; } int dx[4] = { -1,0,1,0 }, dy[4] = { 0,1,0,-1 }; int t = matrix[x][y]; matrix[x][y] = '*'; for (int i = 0; i < 4; i++) { int a = x + dx[i], b = y + dy[i]; if ((a >= 0) && (a < matrix.size()) && (b >= 0) && (b < matrix[0].size())) { if (dfs(matrix,str,u+1,a,b)) { return true; } } } matrix[x][y] = t; return false; } bool hasPath(vector<vector<char> >& 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; }