深度优先搜索理论基础及习题797.所有可能的路径

news/2024/7/20 22:22:24 标签: 深度优先, 算法

深搜(dfs)和广搜的区别(bfs)

dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。
bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。
dfs代码框架
dfs需要用到回溯

void dfs(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本节点所连接的其他节点) {
        处理节点;
        dfs(图,选择的节点); // 递归
        回溯,撤销处理结果
    }
}

深搜三部曲
1.确认递归函数,参数
2.确认终止条件
终止添加不仅是结束本层递归,同时也是我们收获结果的时候。另外,其实很多dfs写法,没有写终止条件,其实终止条件写在了, 下面dfs递归的逻辑里了,也就是不符合条件,直接不会向下递归
3.处理目前搜索节点出发的路径

for (选择:本节点所连接的其他节点) {
    处理节点;
    dfs(图,选择的节点); // 递归
    回溯,撤销处理结果
}

797. 所有可能的路径

题目:给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。
题目链接:797. 所有可能的路径

class Solution {
    private List<List<Integer>> result=new ArrayList<>();
    private List<Integer> onepath=new ArrayList<Integer>();
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        onepath.add(0);
        dfs(0,graph);
        return result;

    }
    public void dfs(int node,int[][] graph){
        if(node==graph.length-1){
            List<Integer> oneresult=new ArrayList<Integer>(onepath);
            result.add(oneresult);
        }
        for(int j=0;j<graph[node].length;j++){
                onepath.add(graph[node][j]);
                dfs(graph[node][j],graph);
                onepath.remove(onepath.size()-1);
        }
    }
}

http://www.niftyadmin.cn/n/5161768.html

相关文章

canal 同时监听两个数据库实例

我有两个数据库实例 test和test2 复制一个example 并修改为example2 修改canal.properties文件 找到 destinations 修改为监听example和example2实例 把canal.destinations example 修改为 canal.destinations example,example2 在example目录中修改实例配置文件 instance…

微信小程序将后端返回的图片文件流解析显示到页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式&#xff0c;是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候&#xff0c;就自动解码成为了下面这样的数据数据格式,这样的数据没…

机器视觉opencv答题卡识别系统 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

华为机试练习题:HJ8 合并表记录

1、Java代码 TreeMap 可以自动升序排序&#xff0c;输出符合测试用例如果结果不讲究排序&#xff0c;则可以用 HashMap使用Lambda表达式可简化集合的输出代码&#xff0c;不必再写for循环 import java.util.Scanner; import java.util.TreeMap; import java.util.Map;public …

数据结构-单链表-力扣题

移除链表元素 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;和前面学的单链表的中间删除数据一样&#xff0c;使要被删除节点的前一个节点指向下要被删除节点的下一个节点&#xff0c;然后把要被删除的节点free掉。 具体实现过程&#xff1a;先…

react中遇到的分页问题

问题&#xff1a; 1.使用useState时不能够进行当前页码的改变&#xff0c;数据不会随着页码变化 2.删除当前页的最后一条数据时&#xff0c;页码返回上一页但是数据为空 解决&#xff1a; 1.由于useState和useRef的区别那我们就不考虑使用useState 2.再删除的逻辑当中添加判断条…

深度学习经典网络:GoogleNet

深度学习经典网络--GoogleNet 1、为什么要提出Inception2、为什么是Inception3、实际中的Inception4、GoogleNet 整体网络结构 GoogLeNet是google推出的基于Inception模块的深度神经网络模型&#xff0c;在2014年的ImageNet竞赛中夺得了冠军&#xff0c;在随后的两年中一直在改…

网络安全-零基础小白自学要点

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…