和数独一样的思路,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;
}
};
1225

被折叠的 条评论
为什么被折叠?



