[leetcode刷题系列]Word Search

来源:互联网 发布:上海淘宝拍照基地 编辑:程序博客网 时间:2024/06/03 14:01

暴力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;    }};


原创粉丝点击