给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。
链接:https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
if(dfs(board,word,0,i,j)) return true;
}
}
return false;
}
int dx[4] = {-1,0,1,0}, dy[4] = {0,1,0,-1}; //方向数组
bool dfs(vector<vector<char>>& board, string& word,int u,int x,int y)
{
if(board[x][y]!=word[u]) return false;
if(u==word.size()-1) return true;
char t=board[x][y];
board[x][y]='.';
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a<0||b<0||a>=board.size()||b>=board[0].size()||board[a][b]=='.') continue;
if(dfs(board,word,u+1,a,b)) return true;
}
board[x][y]=t;
return false;
}
};