dfs

作者: mrjunwang | 来源:发表于2018-10-12 13:32 被阅读0次

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output: 1
Example 2:

Input:
11000
11000
00100
00011

Output: 3

public int islandsNum(char[][] grid){
        int row=grid.length;
        int col=grid[0].length;
        int num=0;
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]!='0'){
                    dfs(grid,i,j);
                    num++;
                }

            }
        }
        return num;
    }
    
    private void dfs(char[][] grid, int i, int j) {
        int row=grid.length;
        int col=grid[0].length;
        if(i<0 || j<0 ||i>=row || j>=col || grid[i][j]== '0'){
            return;
        }
        grid[i][j]='0';
        dfs(grid,i-1,j);
        dfs(grid,i+1,j);
        dfs(grid,i,j-1);
        dfs(grid,i,j+1);    }

2.Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

public boolean isExists(char[][] grid,String str){
        if(grid.length==0 || str.length()==0){
            return false;
        }
        else{
            int row=grid.length;
            int col=grid[0].length;
            for(int i=0; i<row; i++){
                for(int j=0; j<col; j++){
                    if( dfs(grid,str,i,j,0))
                        return true;
                }
            }
        }
        return false;

    }
    /**
     * @param grid
     * @param str
     * @param i
     * @param j
     * @param k
     * @return
     *<p>Description: </p>  
     */
    private boolean dfs(char[][] grid, String str, int i, int j, int strIndex) {
        int row=grid.length;
        int col=grid[0].length;
        if(i >= row || j >= col || i<0 || j<0){
            return false;
        }
        if(strIndex>=str.length()){
            return true;
        }
        
        if(grid[i][j]!=str.charAt(strIndex)){
            
            return false;
        }
        grid[i][j]='#';
        if(dfs(grid,str,i-1,j,strIndex+1)){
            return true;
        }
        if(dfs(grid,str,i+1,j,strIndex+1)){
            return true;
        }
        if(dfs(grid,str,i,j-1,strIndex+1)){
            return true;
        }
        if(dfs(grid,str,i,j+1,strIndex+1)){
            return true;
        }
        grid[i][j]=str.charAt(strIndex);
        return false;
    }

相关文章

  • 各种DFS

    DFS邻接矩阵遍历图 DFS邻接表遍历图 DFS回溯(不走重复路径) DFS背包(可重复选) DFS背包(不可重复选)

  • HDFS shell操作

    创建目录hdfs dfs -mkdir 查看所有目录hdfs dfs -ls / 上传文件hdfs dfs -pu...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

  • Clone Graph (Leetcode 133)

    DFS Approach: 注意,对于DFS,对map的赋值要在DFS loop开始以前。这样可以避免由于grap...

  • hdfs的命令行使用

    语法:hdfs dfs 参数 hdfs dfs -ls / 查看根路径下面的文件或文件夹 hdfs dfs -mk...

  • DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索。 它是一种用来遍历或搜索树和图数...

  • DFS及其应用

    内容概要: DFS类的实现 DFS求解连通分量 DFS求解点对之间的一个路径 DFS判定无环图和二分图 相关概念 ...

  • 684. 冗余连接

    主要掌握并查集/dfs/拓扑排序.dfs里要注意从后面开始查,特别是dfs函数如何设计以及

  • 剑指 Offer II 102. 加减的目标值

    首先想到的dfs 好家伙 1500ms。感觉差点就超时了= =。。dfs总是这样= =。。 优化写法 另类的dfs...

  • 算法-Tree深度优先搜索

    DFS(Depth-First Search) DFS 是一种递归形式的搜索方式。相对于“层”的概念,DFS更偏向...

网友评论

      本文标题:dfs

      本文链接:https://www.haomeiwen.com/subject/oazwaftx.html