剑指 Offer 12. 矩阵中的路径
2022/1/29 23:35:20
本文主要是介绍剑指 Offer 12. 矩阵中的路径,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
剑指 Offer 12. 矩阵中的路径
dfs+剪枝问题。
这里由于是需要对所有的相邻节点尝试并且如果行不通需要重试,所以还需要回溯,回溯的过程中也有需要剪枝的地方,如走过的地方就不能再走,并且不能走出图外去。
这里我们用isContains
表示这一轮的搜索是否搜到了要搜的字母,如果搜索到了,就继续往相邻的位置继续搜,如果没有搜到,要记得清除搜索痕迹并且重试。
class Solution { private static final int[] dx = new int[]{-1, 0, 1, 0}; private static final int[] dy = new int[]{0, -1, 0, 1}; public boolean exist(char[][] board, String word) { if(null == word || word.equals("")) { return true; } int m = board.length; int n = board[0].length; boolean[][] visted = new boolean[m][n]; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if(board[i][j] == word.charAt(0)) { boolean isContains = backtrack(board, word, visted, 0, i, j); if(isContains) return true; } } } return false; } private boolean backtrack(char[][] board, String word, boolean[][] visted, int position, int x, int y) { visted[x][y] = true; if(position == word.length() - 1) { return true; } boolean isContains = false; for(int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; int m = board.length; int n = board[0].length; if(nx < 0 || nx >= m || ny < 0 || ny >= n || visted[nx][ny] || board[nx][ny] != word.charAt(position + 1)) { continue; } else { visted[nx][ny] = true; isContains = backtrack(board, word, visted, position + 1, nx, ny); if(isContains) return true; visted[nx][ny] = false; } } if(!isContains) visted[x][y] = false; return isContains; } }
这篇关于剑指 Offer 12. 矩阵中的路径的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-20接口模块封装入门教程
- 2024-09-20请求动作封装入门教程
- 2024-09-20登录鉴权学习:新手入门教程
- 2024-09-20后台管理开发学习:新手入门指南
- 2024-09-20后台管理系统开发学习:从入门到实践
- 2024-09-20后台开发学习:从入门到初级实战指南
- 2024-09-20后台综合解决方案学习:从入门到实践
- 2024-09-20接口模块封装学习入门指南
- 2024-09-20请求动作封装学习:新手入门教程
- 2024-09-20登录鉴权入门:打造安全的用户认证系统