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

  • 相关阅读:
    解决android模拟器太大,小屏幕无法完全显示的问题
    寡人写的第一个HTML5页面
    android开发环境重装系统之后的配置
    PHP程序的一次重构记录
    重构遗留代码(1):金牌大师
    java加密算法研究
    理解Java常量池
    由一个项目看java TCP/IP Socket编程
    java List分组和排序处理
    JAVA获取方法参数名的分析(一)
  • 原文地址:https://www.cnblogs.com/darklights/p/11676123.html
Copyright © 2011-2022 走看看