面试题73:矩阵中的路径
2016-03-31 17:05
435 查看
题目:
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。
思路:
用回溯来做。
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。
思路:
用回溯来做。
#include <iostream> #include <vector> #include <stack> #include <queue> #include <algorithm> //堆算法 #include <functional> //仿函数 using namespace std; bool HasPathCore(char **matrix, int row, int column, int rIndex, int cIndex, char *str, int &pathLength, vector<vector<bool>>&visited) { if (str[pathLength] == '\0') return true; bool hasPath = false; if (rIndex >= 0 && rIndex < row && cIndex >= 0 && cIndex < column && matrix[rIndex][cIndex] == str[pathLength] && !visited[rIndex][cIndex]) { ++pathLength; visited[rIndex][cIndex] = 1; hasPath = HasPathCore(matrix, row, column, rIndex + 1, cIndex, str, pathLength, visited) ||//下 HasPathCore(matrix, row, column, rIndex - 1, cIndex, str, pathLength, visited) || //上 HasPathCore(matrix, row, column, rIndex, cIndex + 1, str, pathLength, visited) || //右 HasPathCore(matrix, row, column, rIndex, cIndex - 1, str, pathLength, visited); //左 if (!hasPath) { --pathLength; visited[rIndex][cIndex] = 0; } } return hasPath; } bool HasPath(char **matrix, int row, int column, char *str) { if (row < 1 || column < 1 || str == NULL) return false; vector<vector<bool>> visited(row, vector<bool>(column, 0)); int pathLength = 0; for (int rIndex = 0; rIndex < row; rIndex++) for (int cIndex = 0; cIndex < column; cIndex++) { if (HasPathCore(matrix, row, column, rIndex, cIndex - 1, str, pathLength, visited)) return true; } return false; } int main() { char *matrix[] = { "abce", "sfcs", "adee" }; cout << HasPath(matrix, 3, 4, "abfc") << endl; return 0; }
相关文章推荐
- 2016实习生笔试&面试总结思考
- 面试题集锦1
- PHP程序员面试问题
- 21个数据科学家面试必须知道的问题和答案
- 多线程:自动释放池(含一个经典面试题)
- 网易游戏面试经验(三)
- 面试算法——权值最大的叶节点到权值最小的叶节点的距离
- 面试算法——寻找第K大的数(快速排序的应用)
- C#程序员经常用到的10个实用代码片段
- MySQL DBA面试全揭秘
- 职场35岁现象:各位小伙伴接近了吗?!
- android 面试题
- Android面试回忆录
- 饿了么java面试题(三轮面试亲身经历总结)
- 记阿里巴巴的一次面试
- 码农小汪-剑指Offer之23 -复杂链表的复制
- Java高级开发工程师面试考纲
- 100个iOS开发/设计面试题汇总
- 面试题72:滑动窗口的最大值
- 微软面试题:利用天平砝码,三次将140克的盐 分成50、90克两份?