[leetcode刷题系列]Word Search

暴力dfs搜索就行了, 应该没什么好的算法


const int MAXN = 100 + 10;

const int dx[] = {-1, 0, 0, 1};
const int dy[] = {0, -1, 1, 0};
int n, m;
int is[MAXN][MAXN];

bool dfs(int r, int c, int p, vector<vector<char> > & board, string & word){
    if(board[r][c] != word[p])
        return false;
    if(p >= word.size() - 1)
        return true;
    is[r][c] = 1;
    for(int i = 0; i < 4; ++ i){
        int nr = r + dx[i];
        int nc = c + dy[i];
        if(nr >= 0 && nr < n)
            if(nc >= 0 && nc < m)
                if(!is[nr][nc])
                    if(dfs(nr, nc, p + 1, board, word))
                        return true;
    }
    is[r][c] = 0;
    return false;
}
class Solution {
public:
    bool exist(vector<vector<char> > &board, string word) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(board.size() <= 0 || board[0].size() <= 0)
            return false;
        if(word.size() <= 0)
            return false;
        memset(is, 0x00, sizeof(is));
        n = board.size();
        m = board[0].size();
        for(int i = 0; i < n; ++ i)
            for(int j = 0; j < m; ++ j)
                if(dfs(i, j, 0, board, word))
                    return true;
        return false;
    }
};


猜你喜欢

转载自blog.csdn.net/sigh1988/article/details/9956943