矩阵中的路径(DFS)
2022/4/18 6:17:12
本文主要是介绍矩阵中的路径(DFS),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。
注意:
- 输入的路径不为空;
- 所有出现的字符均为大写英文字母;
数据范围
矩阵中元素的总个数 [0,900]。
路径字符串的总长度 [0,900]。
样例
matrix= [ ["A","B","C","E"], ["S","F","C","S"], ["A","D","E","E"] ] str="BCCE" , return "true" str="ASAE" , return "false"
1 class Solution { 2 public: 3 static constexpr int g_direction[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // 上、右、下、左四个方向 4 bool hasPathHelper(const vector<vector<char>> &matrix, int x, int y, 5 const string &str, int &pathLength, vector<vector<bool>> &visited) { 6 // DFS出口:字符串全部匹配完 7 if (str[pathLength] == '\0') { 8 return true; 9 } 10 int row = matrix.size(); 11 int cow = matrix[0].size(); 12 bool hasPath = false; 13 // 1、元素在范围内;2、待匹配元素与字符串中字符匹配;3、元素未被访问过 14 if ((x >= 0 && x < row) && (y >= 0 && y < cow) && (matrix[x][y] == str[pathLength]) && !visited[x][y]) { 15 visited[x][y] = true; 16 pathLength++; 17 for (int i = 0; i < 4; i++) { 18 int xNext = x + g_direction[i][0]; 19 int yNext = y + g_direction[i][1]; 20 if (hasPathHelper(matrix, xNext, yNext, str, pathLength, visited)) { 21 hasPath = true; 22 break; 23 } 24 } 25 // 回溯 26 if (!hasPath) { 27 visited[x][y] = false; 28 pathLength--; 29 } 30 } 31 return hasPath; 32 } 33 bool hasPath(vector<vector<char>>& matrix, string &str) { 34 if (matrix.size() == 0 || matrix[0].size() == 0 || str.empty()) { 35 return false; 36 } 37 int row = matrix.size(); 38 int cow = matrix[0].size(); 39 vector<vector<bool>> visited(row, vector<bool>(cow, false)); // 标记元素是否被访问过 40 int pathLength = 0; // 字符串中匹配的字符索引 41 for (int i = 0; i < row; i++) { 42 for (int j = 0; j < cow; j++) { 43 if (hasPathHelper(matrix, i, j, str, pathLength, visited)) { 44 return true; 45 } 46 } 47 } 48 return false; 49 } 50 };
这篇关于矩阵中的路径(DFS)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-29设计Element UI表单组件居然如此简单!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南