题目链接
题目描述
思路
1.要找到单词是否连续的出现在图中,所以用index来遍历word,x,y来遍历图
2.检查图中满足要求的第一位,从第一个字符开始遍历
3.检查本结点是否满足要求:满足没有被搜过,且与word的对应字符相等
代码
public class t3 {
boolean flag = false;//找到的标志
boolean[][] visited;//标记是否访问过
public boolean exist(char[][] board, String word) {
visited = new boolean[board.length][board[0].length];
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
//找出第一个字符
if(isTrue(i,j,board,word.charAt(0))){
dfs(board,word,1,i,j);
}
}
}
return flag;
}
private void dfs(char[][] board,String word,int index,int x,int y){
if(index==word.length()){//找到可以结束
flag = true;
return;
}
if(!flag){
//判断本结点合法性,合法就继续
if(isTrue(x,y,board,word.charAt(index))){
visited[x][y] = true;
dfs(board,word,index+1,x+1,y);
dfs(board,word,index+1,x-1,y);
dfs(board,word,index+1,x,y+1);
dfs(board,word,index+1,x,y-1);
visited[x][y] = false;//回溯
}
}
}
//判断结点合法性
private boolean isTrue(int x,int y,char[][] board,char ch){
return x>=0&&x<board.length&&y>=0&&y<board[0].length&&board[x][y]==ch&&!visited[x][y];
}
}