zoukankan      html  css  js  c++  java
  • 搜索+回溯

    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

  • 相关阅读:
    ZRender实现粒子网格动画实战
    线段树专题—ZOJ1610 Count the Colors
    LeetCode Recover Binary Search Tree
    Android跨进程訪问(AIDL服务)
    刘下记录:ImageView.scaleType 属性全解析(含视频)
    myeclipse解决JSP文件里script背景颜色的调整
    hdu 5381 The sum of gcd(线段树+gcd)
    newlisp HTTP Basic Authentication
    codeforces 132C Logo Turtle--- dp dfs
    python代码风格-PEP8
  • 原文地址:https://www.cnblogs.com/darklights/p/11676123.html
Copyright © 2011-2022 走看看