稍微优化了一下第一个代码,用‘1’表示访问过

class Solution {
public:
    bool exist(vector<vector<char> > &board, string word) {
        int m = board.size();
        int n = board[0].size();
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (dfs(board, word, 0, i, j)) return true;
            }
        }
        return false;
    }

    bool dfs(vector<vector<char> > &board, string& word, int pos, int x, int y)
    {
        if (pos == word.size()) return true;
        if (x < 0 || x >= board.size() || y <0 || y >= board[0].size()) return false;
        if (board[x][y] != word[pos]) return false;
        char t = board[x][y];
        board[x][y] = '1';
        bool a = dfs(board, word, pos + 1, x + 1, y) ||
                 dfs(board, word, pos + 1, x - 1, y) ||
                 dfs(board, word, pos + 1, x, y + 1) ||
                 dfs(board, word, pos + 1, x, y - 1);
        board[x][y] = t;
        return a;
    }
};