搜索+回溯

79(单词搜索)

class Solution {
public:
    int m,n,d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
    vector<vector<bool>> visited;
    
    bool inarea(int x,int y){
        return x>=0 && x<m && y>=0 && y<n; 
    }
    
    bool searcharea(const vector<vector<char>> &board,const string& word,int index,int startx,int starty){
        if(index==word.size()-1)
            return board[startx][starty] == word[index];
            
        if(board[startx][starty]==word[index]){
            visited[startx][starty]=true;
            for(int i=0;i<4;i++){
                int newx=startx+d[i][0];
                int newy=starty+d[i][1];
                if(inarea(newx,newy) && !visited[newx][newy] && searcharea(board,word,index+1,newx,newy) )
                    return true;
            }
            visited[startx][starty] =false;
        }
        return false;
    }
    
    bool exist(vector<vector<char>>& board, string word) {
        m=board.size();
        n=board[0].size();
        
        visited=vector<vector<bool>>(m,vector<bool>(n,false));
            
        for(int i=0;i<board.size();i++)
            for(int j=0;j<board[i].size();j++)
                if(searcharea(board,word,0,i,j))
                    return true;
        
        return false;
    }
};

200(连通岛屿数量,floodfill算法)

class Solution {
public:
    int m,n,d[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
    vector<vector<bool>> visited;
    
    bool inarea(int x,int y){
        return x>=0 && x<m && y>=0 && y<n;
    }
    
    void dfs(vector<vector<char>> &grid,int x,int y){
        
        visited[x][y]=true;
        for(int i=0;i<4;i++){
            int newx=x+d[i][0];
            int newy=y+d[i][1];
            if(inarea(newx,newy)&&!visited[newx][newy]&&grid[newx][newy]=='1')
                dfs(grid,newx,newy);
        }
            
        return;
    }
    
    int numIslands(vector<vector<char>>& grid) {
        m=grid.size();
        if(m==0)
            return 0;
        n=grid[0].size();
        
        visited=vector<vector<bool>>(m,vector<bool>(n,false));
            
        int res=0;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(grid[i][j]=='1'&&!visited[i][j]){
                    res++;
                    dfs(grid,i,j);
                }
        return res;
    }
};

130

417

原文地址:https://www.cnblogs.com/darklights/p/11676123.html