题意理解
在一个矩阵中搜索单词,要求单词相邻的字母在矩阵中也相邻
问题分析
回溯法
其他
回头看
链接
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 (search(board, word, i, j, 0)) //针对每个字母当成开头作搜索
{
return true;
}
}
}
return false;
}
bool search(vector<vector<char>> &board, string word, int i, int j, int index) //i,j表示矩阵的位置,index表示word的当前字母位置
{
if (index == word.size()) //如果位置超过了最后一位
{
return true; //说明已经找到
}
if (i < 0 || i > board.size() - 1 || j < 0 || j > board[0].size() - 1) //如果,前后左右不在字母矩阵范围内
{
return false; //说明没有找到
}
if (board[i][j] != word[index]) //如果当前矩阵字母和单词当前字母不匹配
{
return false; //说明没有找到
}
board[i][j] = '*'; //找到后,将这个字母标记为*
bool furtherSearch = search(board, word, i + 1, j, index + 1) ||
search(board, word, i, j + 1, index + 1) ||
search(board, word, i - 1, j, index + 1) ||
search(board, word, i, j - 1, index + 1); //前后左右搜索当前word中当前字母
board[i][j] = word[index]; //还原字母
return furtherSearch; //返回结果
}