Word Search

来源:互联网 发布:阿斯顿马丁广告 知乎 编辑:程序博客网 时间:2024/06/05 20:49

和数独一样的思路,brute-force,分四个方向,但是因为我是先判断相等再递归调用,判断结束条件的时候应该是位置在最后一个字符n-1,而不是n。(就这个-1调了一个小时TT。。)

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


0 0
原创粉丝点击