(一)剑指Offer12. 矩阵中的路径
基本思路:
图中最常见的就是DFS和BFS算法的应用,即搜索方法。这一题如果把顶点看做根节点,那么实际就是一个DFS搜索的题。由于在搜索过程中可能走向重复的点,所以需要维护一个数组,用于存储每个结点是否访问过。
class Solution {
boolean flag = false;//标识路径是否存在
void helpFunc(char[][] board, int target, char[] words,int x, int y){
//target:现在要找words中的第几个字符 x、y:当前位于board的那个位置
if(flag == true || x < 0 || x >= board.length || y < 0 || y >= board[0].length || board[x][y] != words[target]){
return ;
}
if(target == words.length-1 && board[x][y] == words[target]){
flag = true;
return ;
}
if(target != words.length-1 && board[x][y] == words[target]){
board[x][y] = '\0';//特殊的访问标志方法
helpFunc(board,target+1,words,x+1,y);
helpFunc(board,target+1,words,x,y+1);
helpFunc(board,target+1,words,x-1,y);
helpFunc(board,target+1,words,x,y-1);
board[x][y]= words[target];
return;
}
}
public boolean exist(char[][] board, String word) {
char[] words = word.toCharArray();
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[0].length; j++){
//选择路径的起始位置
helpFunc(board,0,words,i,j);
//查找从这个点出发是否存在该路径,通过flag标识
if(flag == true){
return true;
}
}
}
return false;
}
}