题目链接:剑指 Offer 12. 矩阵中的路径
题目描述:
思路:这题一看就是搜索,直接套dfs求连通块的板子。简单解释一下就是:
- 找一个开始能匹配进行搜索,搜索该条路过程中标记搜索过的点(这里为矩阵中的字母),当找到一条链路之后递归返回匹配成功
- 如果不能匹配成功,在回溯时候需要进行标记还原
class Solution {
private char[][] board;
private boolean vis[][];
int dir[][]={{1,0},{-1,0},{0,1},{0,-1}}; //方向数组
public boolean exist(char[][] board, String word) {
this.board=board;
vis=new boolean[board.length][board[0].length];
for(int row=0;row<board.length;row++){
for(int col=0;col<board[0].length;col++){
if(board[row][col]==word.charAt(0)&&!vis[row][col]&&dfs(word,0,row,col)){
return true;
}
}
}
return false;
}
public boolean dfs(String word,int index,int row,int col){
if (index == word.length()-1 && word.charAt(index) == board[row][col]){
return true;
}
if(board[row][col]!=word.charAt(index)) return false;
vis[row][col]=true;
for(int i=0;i<dir.length;i++){
int dx=row+dir[i][0];
int dy=col+dir[i][1];
if(dx>=0 && dx<board.length && dy>=0 && dy<board[0].length && !vis[dx][dy]){
if(dfs(word,index+1,dx,dy)) return true;
}
}
vis[row][col]=false;
return false;
}
}