递归:深搜dfs的常见题目

题目:https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e?tpId=295&tqId=1024684&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
刚开始确实是没有想到是dfs,只有想到了回溯。太久没有做了已经不记得解法了,深搜就是不断往深处搜索,类似迷宫题目(不过说回来,如果碰到迷宫题目还会不会解哈哈哈)。首先先找到n,m。分清楚长和高到底是谁,因为这一个问题之前也总是混淆,如果实在不记得就拿一个二维数组出来对比一下。然后接着是判断数组空,不为空才能进行接下来的深搜。遍历循环二维数组,如果这一个元素是1那么count++,然后进入深搜进入深搜,深搜第一件事情就是把当前已经遍历过的元素变为0,然后按照上下左右去深搜即可。
图片说明

package com.kuang.reflection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;

public class Test07 {

    public int solve (char[][] grid) {
        int n = grid.length;
        if(n == 0){
            return 0;
        }
        int m = grid[0].length;
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if(grid[i][j] == '1'){
                    count++;
                    dfs(grid,i,j);
                }
            }
        }
        return count;

    }
    public void dfs(char[][] grid,int i,int j){
        int n = grid.length;    //高
        int m = grid[0].length; //长
        grid[i][j] = '0';
        //遍历四个方向
        if(i - 1 >= 0 && grid[i - 1][j] == '1'){
            dfs(grid,i - 1,j);
        }
        if(i + 1 < n && grid[i + 1][j] == '1'){
            dfs(grid,i + 1,j);
        }
        if(j - 1 >= 0 && grid[i][j - 1] == '1'){
            dfs(grid,i,j - 1);
        }
        if(j + 1 < m && grid[i][j + 1] == '1'){
            dfs(grid,i,j + 1);
        }

    }


    public static void main(String[] args) {





    }


}
全部评论
我最害怕机试遇到DFS
1 回复 分享
发布于 2022-07-29 19:25

相关推荐

点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务