Code

class Solution {
public:
    int d[5] = {1,0,-1,0,1};
    vector<vector<bool>> visited;
    int x_size, y_size;

    bool exist(vector<vector<char>>& board, string word) {
        x_size = board.size();
        y_size = board[0].size();
        for (int i=0; i<x_size; i++) {
            vector<bool> vs;
            for (int j=0; j<y_size; j++) {
                vs.push_back(false);
            }
            visited.push_back(vs);
        }
        for (int i=0; i<board.size(); i++) {
            for (int j=0; j<board[0].size(); j++) {
                if (board[i][j] == word[0]) {
                    if (DFS(word, 0, board, i, j)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    bool DFS(string word, int index, vector<vector<char>>& board, int x, int y) {
        if (index == word.length() - 1) return true;
        bool result = false;
        visited[x][y] = true;
        for (int i=0; i<4; i++) {
            if (in_range(x+d[i], y+d[i+1]) && !visited[x+d[i]][y+d[i+1]] &&
                word[index+1] == board[x+d[i]][y+d[i+1]]) {
                result |= DFS(word, index+1, board, x+d[i], y+d[i+1]);
            }
        }
        visited[x][y] = false;
        return result;
    }

    bool in_range(int x, int y) {
        if (x >=0 && x < x_size && y >= 0 && y < y_size) return true;
        return false;
    }
};