Word Search
回溯
vector<bool> visited;
int m,n;
bool exist(vector<vector<char> > &board, string word) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(word.empty())
return true;
m = board.size();
n = board[0].size();
visited.clear();
visited.resize(m*n,false);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(dfs(i,j,board,0,word))
return true;
}
}
return false;
}
bool dfs(int i,int j,vector<vector<char> > &board, int pos,string& word)
{
if(pos==word.size())
return true;
if(i<0||i>=m||j<0||j>=n||visited[i*n+j]) return false;
if(board[i][j]!=word[pos]) return false;
visited[i*n+j] = true;
if(dfs(i-1,j,board,pos+1,word)||dfs(i+1,j,board,pos+1,word)||dfs(i,j-1,board,pos+1,word)||dfs(i,j+1,board,pos+1,word))
{
return true;
}
else
{
visited[i*n+j] = false;
return false;
}
}
浙公网安备 33010602011771号