给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" 输出:true
示例 2:
输入:board = [["a","b"],["c","d"]], word = "abcd" 输出:false
提示:
1 <= board.length <= 200
1 <= board[i].length <= 200
board
和word
仅由大小写英文字母组成
class Solution {
public:
int vis[201][201] = {0};
int fz[4][2] = {0,1,0,-1,1,0,-1,0};
int flag = 0;
int n,m;
void dfs(int x,int y,int len,string word,vector<vector<char>>& board){
if(len == word.size()) flag = 1;
if(flag == 1) return;
for(int i = 0;i < 4;i++){
int xx = x + fz[i][0];
int yy = y + fz[i][1];
if(xx >= 0 && xx < n && yy >= 0 && yy < m && word[len] == board[xx][yy] && vis[xx][yy] == 0){
vis[xx][yy] = 1;
dfs(xx,yy,len + 1,word,board);
vis[xx][yy] = 0;
}
}
}
bool exist(vector<vector<char>>& board, string word) {
n = board.size(),m = board[0].size();
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
if(board[i][j] == word[0]){
vis[i][j] = 1;
dfs(i,j,1,word,board);
vis[i][j] = 0;
}
}
}
return flag == 1;
}
};