funcdepthfirstsearch(board [][]byte, visit [][]bool, word string, x, y, pos int)bool{if pos ==len(word){returntrue}if x <0|| x >=len(visit)|| y <0|| y >=len(visit[0])|| visit[x][y]||byte(word[pos])!= board[x][y]{returnfalse}
visit[x][y]=true
ret :=depthfirstsearch(board, visit, word, x +1, y, pos +1)if!ret {
ret =depthfirstsearch(board, visit, word, x -1, y, pos +1)}if!ret {
ret =depthfirstsearch(board, visit, word, x, y +1, pos +1)}if!ret {
ret =depthfirstsearch(board, visit, word, x, y -1, pos +1)}
visit[x][y]=falsereturn ret
}funcexist(board [][]byte, word string)bool{
visit :=make([][]bool,len(board))for index,_:=range visit {
visit[index]=make([]bool,len(board[0]))}for i :=0; i <len(board); i++{for j :=0; j <len(board[0]); j++{ifdepthfirstsearch(board, visit, word, i, j,0){returntrue}}}returnfalse}