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;
        }
    }

  

posted @ 2013-10-05 16:12  summer_zhou  阅读(183)  评论(0编辑  收藏  举报