import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param board string字符串一维数组
* @param word string字符串
* @return bool布尔型
*/
//上下左右
int []dx={0,0,-1,1};
int []dy={-1,1,0,0};
boolean vis[][];
char[]word;
int m,n;
public boolean exist (String[] board, String _word) {
// write code here
word=_word.toCharArray();
m=board.length; n=board[0].length();
vis=new boolean[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(board[i].charAt(j)==word[0]){
if(dfs(board,i,j,0)==true){
return true;
}
}
}
}
return false;
}
public boolean dfs(String[]board,int i,int j,int pos){
if(pos==word.length-1){
return true;
}
vis[i][j]=true;
for(int k=0;k<4;k++){
int x=i+dx[k];
int y=j+dy[k];
if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]&&board[x].charAt(y)==word[pos+1]){
if(dfs(board,x,y,pos+1)){
return true;
}
}
}
vis[i][j]=false;
return false;
}
}