题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
思路:
|
|
采用深度优先遍历(dfs),从每个节点开始走,走的方向记为: 上右下左。走过的元素要屏蔽掉,防止再次进入。如果走的过程中一旦与查询字符串 “bcced” 不同就 break 掉。
- 例如从 a 开始走,与 “bcced” 第一个字符不同,直接break
- 再从 b 开始走,上右下左,只有右能走通,b => c
- 然后 c 再上右下左,只能下方向走通 b=>c=>c
- 以此类推,注意上右下左走的时候
- 数组要有越界判断
- 已经走过的字符要屏蔽掉
C++ 代码
|
|