Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[ ["ABCE"], ["SFCS"], ["ADEE"] ]word =
"ABCCED", -> returns true,word =
"SEE", -> returns true,word = "ABCB", -> returns false.
class Solution {
public:
bool exist(vector<vector<char>>& board, string word)
{
//遍历二维矩阵
//求行
//求列
int row=board.size();//row
int col=board[0].size();//col
if(row<=0||col<=0) return false;
if(word.size()==0) return true;
//要查找的字符第一个char
char fch=word.at(0);
//在数组中寻找第一个字符
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
if(board[i][j]==fch)
{ board[i][j]=' ';
if(dfs(board,word.substr(1),i,j)) return true;
board[i][j]=fch;
}
}
return false;
}
bool dfs(vector<vector<char>> &board,string word,int a,int b)
{
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int row=board.size();//row
int col=board[0].size();//col
if(word.size()==0) return true;
for(int i=0;i<4;i++)
{
int x=a+dir[i][0];
int y=b+dir[i][1];
if(x>=0&&x<row&&y>=0&&y<col&&board[x][y]==word.at(0))
//得先判断x,y是否越界;
{
board[x][y]=' ';
if(dfs(board,word.substr(1),x,y)) return true;
board[x][y]=word.at(0);
}
}
return false;
}
};
本文介绍了一个算法问题:在二维网格中查找指定单词的存在性。通过深度优先搜索(DFS)策略,遍历网格上的每个单元格并检查是否可以构成目标单词。文章提供了C++实现代码示例。
957

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



