面试题66 矩阵中的路径
2016-04-10 22:10
489 查看
题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。class Solution { public: bool path(char* matrix, int rows, int cols, char* str, int i, int j, vector<int> isWalked){ if (matrix[i * cols + j] == str[0] && isWalked[i * cols + j] == 0){ if (*(str+1) == '\0') return true; isWalked[i * cols + j] = 1; bool result = false; if (i - 1 >= 0) result = path(matrix, rows, cols, str + 1, i - 1, j, isWalked); if (!result && i + 1 < rows) result = path(matrix, rows, cols, str + 1, i + 1, j, isWalked); if (!result && j - 1 >= 0) result = path(matrix, rows, cols, str + 1, i, j - 1, isWalked); if (!result && j + 1 < cols) result = path(matrix, rows, cols, str + 1, i, j + 1, isWalked); return result; } else return false; } bool hasPath(char* matrix, int rows, int cols, char* str) { if (str == NULL) return false; if (*str == '\0') return true; vector<int> isWalked; for (int i = 0; i < rows * cols; i++) isWalked.push_back(0); for (int i = 0; i < rows; i++){ for (int j = 0; j < cols; j++){ if (path(matrix, rows, cols, str, i, j, isWalked)) return true; } } return false; } };
相关文章推荐
- 面试题65 滑动窗口的最大值
- 程序员眼里的高迸发
- 面试题64 数据流中的中位数
- 面试题63 二叉搜索树的第k个结点
- 前端面试题整理——CSS篇
- 面试题62 序列化二叉树
- 面试题61 把二叉树打印成多行
- 面试题60 按之字形顺序打印二叉树
- JAVA多线程和并发基础面试问答
- 【转】程序员技术练级攻略
- LeetCode(39)-Intersection of Two Linked Lists
- 面试题59 对称的二叉树
- 一位Google程序员的算法学习之路
- Android面试常问的技术问题
- 面试题58 二叉树的下一个结点
- SSH框架整合配置所需JAR包(SSH整合)
- 面试题57 删除链表中重复的结点
- Activity生命周期(面试必问)
- error 和 exception的区别
- Android中的Activity四种启动模式(launchMode)(面试必问)