新手入门dfs/回溯


前言

本题选用ABC全排列问题,方便大家更容易理解dfs回溯过程
记录个人对算法的总结的理解,如有错误请大佬指出,


提示:以下是本篇文章正文内容,下面案例可供参考

一、dfs,回溯模板?

个人看过诸多关于dfs,回溯视频以及其他优质博客
都主要围绕两点,1:何时停止搜索,2:遍历剩下节点,

二、使用步骤

废话不多说上代码,可以仔细理解文章注释,建议先画出它的树状结构图,便以理解代码

2.读入数据

代码如下(示例):

import java.util.*;public class ABC {public static void main(String[] args) {//res1负责存储最终结果List<Stack<Character>>res1=new ArrayList<>();//使用栈集合,先进后出原则Stack<Character> res = new Stack<>();char[]a={'A','B','C'};System.out.println(permute(a));}public static List<List<Character>> permute(char[]nums){List<List<Character>>res1=new ArrayList<>();Stack<Character> res = new Stack<>();int len= nums.length;boolean[]pb=new boolean[len];    ///判断次数dfs(nums, pb, 0, res,res1);   //进行dfsreturn res1;}//pb判断当前元素是否使用public static void dfs(char[]nums, boolean[]pb, int index, Stack<Character> res, List<List<Character>> res1){//截至条件if(index==nums.length){res1.add(new ArrayList<>(res));    //只要层级达到字符数字长度就将路径添加到res1中return;                         //return单个使用,为终止方法}//遍历候选节点for (int i = 0; i < nums.length; i++) {char c = nums[i];if (!pb[i]) {          //判断当前元素是否使用的条件,boolean默认为falseres.push(c);        //把没有使用的元素添加到栈集合里面pb[i] = true;       //因为使用了这个元素所以给他设置为true,dfs(nums, pb, index + 1, res,res1);  //此处+1是为了进入下一层,如果想深入理解的伙伴可以在回溯前后打印当前元素值res.pop();              //恢复状态,将前一个元素删除,pb[i] = false;             //删除了就证明没有被使用了}}}}---# 本人创建新手交流群,群内基本小白,可以使大家没有压力问问题,并配备一位大佬,群内拥有丰富学习路线资源,大家可以共同进步,欢迎前来交流983528891

使用stack栈集合完成ABC全排列相关推荐

  1. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )

    文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...

  2. Java 集合深入理解(13):Stack 栈

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情不错,再来一篇 Stack ! 数据结构中的 栈 数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操 ...

  3. [Java]Stack栈和Heap堆的区别(终结篇)[转]

    首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: hea ...

  4. java集合类——Stack栈类与Queue队列

    今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展. 栈是 后进先出的. 栈提供了通常的 push ...

  5. Stack(栈 c++模版实现)

    Stack(栈 c++模版实现) // // Created by XXX on 2021/7/10. //#ifndef C11LEARN_STACK_H #define C11LEARN_STAC ...

  6. JAVA Stack栈和Heap堆的区别(转)

          首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语:  堆 ...

  7. 定义一个泛型为String类型的List集合,统计该集合中每个字符 (注意,不是字符串)出现的次数。例如:集合中有”abc”、”bcd”两个元素, 程序最终输出结果为:

    代码 import java.util.*;/*6.定义一个泛型为String类型的List集合,统计该集合中每个字符(注意,不是字符串)出现的次数.例如:集合中有"abc".&q ...

  8. C/C++ stack栈的理解以及使用

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  9. java内存stack heap_java内存解析-------stack(栈)和heap(堆)的理解

    学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分. ...

  10. java 线程栈大小配置,JVM运行时数据区详解-Stack栈(优化配置、代码样例)

    最近有段时间没有更新Netty的教程了,却发了一些其他的东西.可能有的朋友会问,难道这就完事了?不会的.两方面原因.第一.笔者也是需要工作的人,自然要完成好工作中的任务,这里面也有很多东西需要学习和研 ...

最新文章

  1. Python十大装腔语法
  2. DBvisualizer free 9.2.10 升级pro版本
  3. 文巾解题 21. 合并两个有序链表
  4. 将Doc或者Docx文档处理成html的代码逻辑;统计word中的字数,段数,句数,读取word中文档内容的代码逻辑
  5. python如何实现matlab_Python实现matlab数据绘制
  6. 动态规划|最大k乘积问题(C语言)
  7. 关于webSocket建立前后端连接,并进行心跳机制的实现
  8. 高考填报志愿计算机操作技巧,高考志愿填报技巧经验
  9. 视图与表之间的异同点_视图和表的区别和联系
  10. IBM Bluemix 自然语言处理初识
  11. prolog参考手册学习(第一章)
  12. 7-1 购买火车票 (15 point(s))
  13. javascript视频教程之《ECMA5核心+设计模式》
  14. p1口实验_「正点原子NANO STM32开发板资料连载」第二章 实验硬件资源详解
  15. ADS20XX完全安装(任意盘)、卸载指南
  16. php扫描图片条形码,php如何生成条形码图片(附代码)
  17. @RequestBody注解的简单用法
  18. 7.STM32F407ZG串口通信配置流程
  19. IPFS - 可快速索引的版本化的点对点文件系统(草稿3)
  20. ie下“无法将这个证书验证到一个受信赖的证书颁发机构”问题解决

热门文章

  1. 总管家云CRM:客户不跟踪,销售一场空
  2. 视频教程-射频工程师工作指南-无线通信
  3. 手机如何双声道录音_如何在手机端实现电话录音功能?
  4. 数学建模之SPSS应用——聚类分析
  5. VCC,GND,VSS,VDD的理解
  6. Revit二次开发资料汇总
  7. opengl魔方文档_基于OpenGL的3D旋转魔方的实现.doc
  8. cc2530 按键唤醒功耗模式PM3例程
  9. zigbee网关数据到json格式
  10. 计算机水平考试模块数量,职称计算机考试科目、模块数量是什么