day37回溯算法

news2024/12/23 23:14:08

1.什么是回溯算法
回溯就是递归问题:
解决组合问题(无顺序),切割问题,子集问题,排列问题(顺序)
所有的回溯可以抽象为一棵树:树 宽度就是for循环大小 树深度就是回溯

void backtracking(参数)
{
  if(终止条件)
  叶子结点收集问题;
  returnfor(集合元素集)//子节点数 
  处理节点;
  递归函数;
  回溯操作;//有撤销的结果
}

2.组合问题
在这里插入图片描述
回溯三部曲:
递归函数的参数返回值 : void backtracking(n,k,startindex);n个数4(1234),k组合大小,startindex 搜索起始位置 一维数组path(12 13 14 等等)二维数组 res
确定终止条件;path.size() == k ;res,push(path);
单层递归逻辑;、
for(i= startindex;i<=n;i++){
path.push();
backtracking(n.k.i+1);
path.pop();//弹出
剪枝
在这里插入图片描述
代码:剪枝剪的就是子孩子
for(i = startindex;i<= n-(k-path.size)+1;i++){// 四个子孩子遍历
path.push();
backtracking();//往下搜索过程
path.pop();
}
path.size已经选取的元素大小,还剩k-path.size()个元素要选取;选取的元素至多n-(k-path.size())+1个;
为什么+1,起始位置包括startIndex;
n = 4; k = 3;path.size() = 0;至多从哪里开始: 4-3+1 =2; 234
题目描述
在这里插入图片描述

分析:
在这里插入图片描述

int* path;//一维数组,收集单条路径符合的结果
int path_size;
int** ans;// 二维数组 所有结果集
int ans_size;

void backtrack(int k, int n, int sum, int index)// index比如取2之和,从3开始;开始的时候是1 
{
    // 终止条件 沿途取的个数 == k
    if (path_size == k){// 
        if (sum == n){// sum = n 就是目标结果
            int* temp = (int*) malloc((k + 1)* sizeof(int));
            for (int j = 0; j < k; j++){
                temp[j] = path[j];
            }
            ans[ans_size++] = temp;
        }
        return;
    }
    int i;
    // 取数
    for (i = index; i <= 9; i++) {
        sum += i;//取数 + i
        path[path_size++] = i; //路径 push
        backtrack(k, n, sum, ++index);//
        sum -= i;
        path_size--;//pop 回退
    }
}
int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes)
{
    path = (int*)malloc((k + 1) * sizeof(int));
    ans = (int*)malloc(20 * sizeof(int*));
    path_size = 0;
    ans_size = 0;
    backtrack(k, n, 0, 1);
    *returnSize = ans_size;
    *returnColumnSizes = (int*)malloc(sizeof(int)*ans_size);
    for (int i = 0; i < ans_size; i++){
        (*returnColumnSizes)[i] = k;
    }
    return ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP——OSPF基础

OSPF基础 一、OSPF基础二、OSPF的区域划分三、OSPF的数据包hello包数据库描述包DBD包链路状态请求包LSR包链路状态更新包LSU包链路状态确认包LSAck包 四、OSPF的状态机五、OSPF的工作过程六、链路状态型的路由生成过程七、条件匹配五、OSPF数据包头部八、OSPF的接口网络类型 一…

C++的六大“天选之子“之“构造“与“析构“

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

【LeetCode】64.最小路径和

题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输出&#…

离多态更近一步

在面向对象的语言里面,封装,继承,多态可谓是在熟悉不过了,当我们每次再去重新认识它们的时候总会有新的发现,为此我也经常感到疑惑,所以在这里和大家一起探讨三个问题,让我们在向多态靠近一点点。 虚表是否真的存在静态区 经常我们都会看见一个问题&#xff0c;虚表到底是存放…

使用show effective grants查看权限

1、问题描述 用户 show grants 显示只有连接权限&#xff0c;但该用户却能执行 sbtest.*下的所有操作 GreatSQL> \s ... Server version: 8.0.32-24 GreatSQL, Release 24, Revision 3714067bc8c ... GreatSQL> show grants; ---------------------------------------…

哪些在线工具能免费转换MP3格式?分享两个方法!

哪些在线工具能免费转换MP3格式&#xff1f;通常来说&#xff0c;MP3格式转换器都具备简洁的界面、便捷的操作以及强大的功能&#xff0c;它们可以将各种流行的视频或音频格式转换成MP3文件&#xff0c;甚至可以制作手机铃声。用户只需要在设置中设定录制时间&#xff0c;即可轻…

MIT 6.830数据库系统 -- lab four

MIT 6.830数据库系统 -- lab four 项目拉取引言事务、锁 & 并发控制事务ACID特性两阶段锁 Recovery and Buffer ManagementGranting Locks(授予锁)练习1 Lock Lifetime练习2 Implementing NO STEAL练习3 事务练习4 死锁和中止练习5 项目拉取 原项目使用ant进行项目构建&am…

勘探开发人工智能应用:初至波拾取

AI在油田主营业务即勘探开发运销和经营管理领域的落地场景&#xff0c;需要的算法、模型及关键技术。 1 初至波拾取 在地震数据采集过程中&#xff0c;由人工震源激发后检波器最先接收到地震波的起跳位置&#xff0c;得到这一位置的过程就是初至拾取。“初至拾取在构建精细近…

AI生成写真照 妙鸭能取代海马体?

只要9.9元和21张照片&#xff0c;就能生成各种风格的个人写真照&#xff0c;界面简洁、卖点吸睛的妙鸭相机突然火了。采用AI技术&#xff0c;它以更低的成本和更高的效率&#xff0c;让用户足不出户“拍写真”&#xff0c;有人直呼&#xff0c;它要抢海马体这类实体照相馆的饭碗…

基于51单片机和proteus的模拟楼道灯系统

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. 系统实时检测楼道光照强度。 2. 光照弱情况下&#xff0c;触摸或声音可开启楼道灯。 3. 光照强情况下&#xff0c;触摸或声音都不能开启楼道灯。 4. 楼道灯开启一段时间&#xff08;3S&#x…

数据库应用:MySQL MHA高可用集群

目录 一、理论 1.MHA 2.MySQL MHA部署准备 3.MySQL MHA部署 二、实验 1.MHA部署 三、问题 1.中英文符兼容报错 2.MHA测试 ssh 无密码认证语法报错 3.MHA测试 ssh 无密码认证log-bin报错 4.MHA测试 mysql 主从连接情况报错slave replication 5.MHA测试 mysql 主从连…

高质量代码究竟依赖设计还是重构而来?

&#x1f449;导读 一个有所追求的程序员一定都希望自己能够写出高质量的代码&#xff0c;但高质量代码从何而来呢&#xff1f;有人认为是设计出来的&#xff0c;就像一栋稳固的大厦&#xff0c;如果没有前期优秀的设计那么肯定难逃豆腐渣工程的命运&#xff1b;也有人认为是重…

什么是NQA?

一、什么是NQA&#xff1f; 网络质量分析NQA&#xff08;Network Quality Analysis&#xff09;是一种实时的网络性能探测和统计技术&#xff0c;可以对响应时间、网络抖动、丢包率等网络指标进行统计。NQA能够实时监视网络服务质量&#xff0c;在网络发生故障时进行有效的故障…

年内实现全面自动驾驶?快来恶补一下自动驾驶技术吧

在7月6日召开的2023世界人工智能大会上&#xff0c;特斯拉CEO斯克预测&#xff0c;随着人工智能技术的快速发展&#xff0c;大约在今年年末&#xff0c;就会实现全面自动驾驶。 他说&#xff0c;“我之前也做过许多类似的预测&#xff0c;我承认之前的预测也不完全准确&#x…

《中国大学生计算机设计大赛》应用与开发组 “国二省一“ 备赛心得,万字干货 (建议收藏)

&#x1f4a7; 《中国大学生计算机设计大赛》备赛心得 \color{#FF1493}{《中国大学生计算机设计大赛》备赛心得} 《中国大学生计算机设计大赛》备赛心得&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客…

Python编译过程和执行原理

hello&#xff0c;这里是Token_w的文章&#xff0c;主要讲解python的基础学习&#xff0c;希望对大家有所帮助 整理不易&#xff0c;感觉还不错的可以点赞收藏评论支持&#xff0c;感谢&#xff01; 目录 一. Python执行原理二. Python内部执行过程2.1 编译过程概述2.2 过程图解…

8.6 PowerBI系列之DAX函数专题-非日期类型的累计聚合

需求 需求1&#xff1a; 需求2&#xff1a; 实现 1.需求1实现&#xff1a; &#xff08;1&#xff09;在power query中添加列-添加索引列&#xff1b; &#xff08;2&#xff09;根据索引列进行累加计算。 度量值 累计聚合销售额 var current_pro_type selectedvalue(…

iTOP-RK3588开发板编译Buildroot

Buildroot 是一款集成的编译集合包&#xff0c;解决了以前交叉编译麻烦的问题&#xff0c;本小节将介绍 buildroot 镜像的编译流程&#xff0c;分为单独编译和完整全自动编译。 首先输入以下命令&#xff0c;选择 buildroot 系统的配置文件 source buildroot/build/envsetup…

办公楼管理高手:一起来学烟雾监测实用技能!

在现代社会中&#xff0c;安全意识和防患意识越来越受到重视。特别是在大型办公楼等人员密集的场所&#xff0c;火灾的风险不容忽视。 为了保障员工和资产的安全&#xff0c;烟感监控成为一项至关重要的安全措施。烟感监控系统作为火灾预警的关键组成部分&#xff0c;能够及早发…

Ubuntu18.04未安装Qt报qt.qpa.plugin could not load the Qt platform plugin xcb问题的解决方法

在Ubuntu 18.04开发机上安装了Qt 5.14.2&#xff0c;当将其可执行程序拷贝到另一台未安装Qt的Ubuntu 18.04上报错&#xff1a;拷贝可执行程序前&#xff0c;使用ldd将此执行程序依赖的动态库也一起拷贝过去&#xff0c;包括Qt5.14.2/5.14.2/gcc_64/plugins目录系的platforms目录…