132. 单词搜索 II

bool find3(vector<vector<char>> &board, string &words,vector<vector<bool>> &visited,int i,int row,int col)
{
    int rowMax = board.size();
    int colMax = board[0].size();

    if (row < 0 || row >= rowMax || col < 0 || col >= colMax)//边界结束
        return false;
    if (true == visited[row][col])//是否访问过
        return false;
    if (words[i] != board[row][col])//是否满足条件
        return false;
    visited[row][col] = true;
    i = i + 1;
    if (i == words.size())//结束
    {
        return true;
    }
    //向上,向下,向左,向右
    if ( find3(board, words, visited, i, row - 1, col) || find3(board, words, visited,  i, row +1, col) || find3(board, words, visited, i, row, col-1) || find3(board, words, visited,  i, row, col+1) )
    {
        return true;
    }
    visited[row][col] = false;//失败回退
    return false;//进行下一个方向
}

bool find(int row,int col,vector<vector<char>> &board, string &words)
{
    int rowMax = board.size();
    int colMax = board[0].size();
    vector<vector<bool>> visited (rowMax, vector<bool>(colMax,false));

    return find3(board, words, visited, 0, row, col);
}


bool Search(vector<vector<char>> &board, string &words)
{
    for (int i = 0; i < board.size(); i++)
    {
        for (int j = 0; j < board[i].size(); j++)
        {
            if (board[i][j] == words[0])
            {
                if (find(i,j,board, words))
                {
                    return true;
                }
            }
        }
    }
    return false;
}

vector<string> wordSearchII(vector<vector<char>> &board, vector<string> &words)
{
    // write your code here
    vector<string> ret;
    for (int i = 0; i < words.size(); i++)
    {
        if (Search(board,words[i]))
        {
            ret.push_back(words[i]);
        }
    }
    return ret;
}

猜你喜欢

转载自blog.csdn.net/yinhua405/article/details/108592318
今日推荐