dfs 广度搜索: 额 说白了就是每次往 上下左右四周找匹配的·字符罢了
同时还要注意当前字符是否已经使用过了。
#include<vector>
#include<string>
#include<iostream>
using namespace std;
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
if(board.size()==0 || board[0].size()==0){
return false;
}
int r = board.size();
int c = board[0].size();
for(int i=0;i<r;++i){
for(int j=0;j<c;++j){
bool result = findWord(board, 0, word, i, j);
if(result){
return true;
}
}
}
return false;
}
bool findWord(vector<vector<char>>& board, int k, string& word, int row,int col){
int rows = board.size()-1;
int cols = board[0].size()-1;
// 当·长度足够 即代表找到了
if(word.size() == k){
return true;
}
if(row < 0 || row > rows || col < 0 || col > cols||board[row][col] != word[k]){
return false;
}
char help = board[row][col];
board[row][col] = '*';
bool res = findWord(board,k+1, word, row+1, col)||
findWord(board, k+1, word, row-1, col)||
findWord(board, k+1, word, row, col+1)||
findWord(board, k+1, word, row, col-1);
board[row][col] = help;
return res;
}
};
int main(){
vector<vector<char>> board({{'C','A','A'},{'A','A','A'},{'B','C','D'}});
// vector<vector<char>> board({{'A'}});
Solution s;
cout << s.exist(board, "AAB");
return 0;
}