Python dfs solution with comments.
    \n    def exist(self, board, word):\n        if not board:\n            return False\n        for i in xrange(len(board)):\n            for j in xrange(len(
        \n    def exist(self, board, word):\n        if not board:\n            return False\n        for i in xrange(len(board)):\n            for j in xrange(len(board[0])):\n                if self.dfs(board, i, j, word):\n                    return True\n        return False\n    \n    # check whether can find word, start at (i,j) position    \n    def dfs(self, board, i, j, word):\n        if len(word) == 0: # all the characters are checked\n            return True\n        if i<0 or i>=len(board) or j<0 or j>=len(board[0]) or word[0]!=board[i][j]:\n            return False\n        tmp = board[i][j]  # first character is found, check the remaining part\n        board[i][j] = "#"  # avoid visit agian \n        # check whether can find "word" along one direction\n        res = self.dfs(board, i+1, j, word[1:]) or self.dfs(board, i-1, j, word[1:]) \\\n        or self.dfs(board, i, j+1, word[1:]) or self.dfs(board, i, j-1, word[1:])\n        board[i][j] = tmp\n        return res
['Depth-First Search', 'Python']