深度优先搜索,每次向上下左右四个方向搜索。
func exist(board [][]byte, word string) bool {
flag := make([][]byte,len(board))
for i:= range flag{
flag[i] = make([]byte,len(board[0]))
}
for i:= range board{
for j:= range board[0]{
if dfs(board,flag,i,j,0,word){
return true
}
}
}
return false
}
func dfs(board,flag [][]byte,i,j,start int, word string) bool {
if start>=len(word){
return true
}else if i<0||i>=len(board)||j<0||j>=len(board[0])||flag[i][j]==1||board[i][j]!=word[start]{
return false
}
flag[i][j]=1
if dfs(board,flag,i-1,j,start+1,word)||dfs(board,flag,i,j+1,start+1,word)||dfs(board,flag,i+1,j,start+1,word)||dfs(board,flag,i,j-1,start+1,word){
return true
}else{
flag[i][j]=0
return false
}
}