dfs
import java.util.*;


public class Solution {
    boolean flag;
    boolean[][] visited;
    public boolean hasPath (char[][] matrix, String word) {
        visited = new boolean[matrix.length][matrix[0].length];
        flag = false;
        for(int i = 0;i<matrix.length;i++){
            for(int j = 0;j<matrix[0].length;j++){
                if(word.charAt(0) == matrix[i][j]){
                    dfs(matrix,word,0,i,j);
                    if(flag == true){
                        return true;
                    }
                }
            }
        }
        return false;
    }
    private void dfs(char[][] matrix,String word,int index,int i,int j){
        if(word.charAt(index) == matrix[i][j] && visited[i][j] == false){
            visited[i][j] = true;
            if(index == word.length()-1){
                flag = true;
                return;
            }
            if(i-1>=0){
                dfs(matrix,word,index+1,i-1,j);
            }
            if(j+1<matrix[0].length){
                dfs(matrix,word,index+1,i,j+1);
            }
            if(i+1<matrix.length){
                dfs(matrix,word,index+1,i+1,j);
            }
            if(j-1>=0){
                dfs(matrix,word,index+1,i,j-1);
            }
            visited[i][j] = false;
        }
    }
}