leetcode-79. 单词搜索
题目:
代码:
#include <iostream>
#incldue <vector>
using namespace std;
bool check(vector<vector<char> >& board,vector<vector<int> >& visited,int i,int j,string& word,int k){
if(board[i][j]!=word[k]){
return false;
}else if(k==word.size()-1){
return true;
}
visited[i][j]=1;
bool res;
int newi,newj;
int directions[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
for(int a=0;a<4;a++){
newi=i+directions[a][0];
newj=j+directions[a][1];
if(newi>=0 && newi<board.size() && newj>=0 && newj<board[0].size() ){
if(!visited[newi][newj]){
bool flag=check(board,visited,newi,newj,word,k+1);
if(flag){
res=true;
break;
}
}
}
}
visited[i][j]=0;
return res;
}
bool exist(vector<vector<char> >& board, string word) {
bool res;
int m=board.size();
int n=board[0].size();
vector<vector<int> >visited(m,vector<int>(n));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
res=check(board,visited,i,j,word,0);
if(res){
return true;
}
}
}
return false;
}
int main(){
vector<vector<char> > board;
string word;
char c;
int m,n;
cin>>m>>n;
for(int i=0;i<m;i++){
board.push_back(vector<char>());
for(int j=0;j<n;j++){
cin>>c;
board[i].push_back(c)
}
}
cin>>word;
bool res;
res=exist(board,word);
if(res){
cout<<"true";
}else{
cout<<"false";
}
return 0;
}