文章目录

  • 一、回溯算法
  • 二、数的组合问题

一、回溯算法

1、回溯法
也叫试探法,实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。

2、回溯法解决问题的步骤
(1)针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。

(2)确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。

(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

二、数的组合问题

1、问题
找出从自然数1~n中任取r个数的所有组合。

2、算法思想
按回溯法的思想,将找到的组合从小到大的顺序存放到数组a[0],a[1],…,a[r-1]中,组合中的元素满足以下性质:
a[i+1]>a[i],后一个数大于前一个数
a[i]-i<=n-r+1,如此

3、C语言实现数的组合

#include <stdio.h>
#define MAX 100
int a[MAX];
void comb(int n, int r)
{int i, j;i= 0;a[i]= 1;do{if(a[i]-i<=n-r+1)  //还可以向前试探 {if(i==r-1)  //找到一个组合{for(j=0; j<r; j++)  //输出一个组合 printf("%4d", a[j]);printf("\n");a[i]++;continue;} i++;  //向前试探 a[i]= a[i-1]+1;}else  //开始回溯 { if(i==0)  //找完全部解return;  //所有解都找到了才返回,结束函数 a[--i]++; }}while(1);
} void main()
{int x, y;printf("请规定截止数和几个数组合(用,分割的整数):");scanf("%d,%d",&x,&y);printf("自然数1~%d中%d个数的任意组合有:\n", x, y);comb(x, y);
}

高中学过的“排列组合”我们就知道是组合是不考虑顺序的,所以一眼看去就知道结果是否正确:

参考文献:《The Function and Algorithm of Program Language C/C++》

C语言经典回溯算法之解决数的组合问题(详解)相关推荐

  1. 【算法】回溯算法+进阶题——全排列Ⅱ、组合总和Ⅱ、解数独

    目录 一.前言 • 什么是回溯算法 • 用回溯能解决那些题型 二.总体思路 1. 通过树逐层解剖 2. 代码框架 3. 是否需要去重 三.例题 1. 组合总和Ⅱ 2. 全排列Ⅱ 3. 解数独 一.前言 ...

  2. c语言编程算法精选,c语言经典程序算法【DOC精选】.doc

    c语言经典程序算法[DOC精选] c语言经典程序算法 浏览次数:47017次悬赏分:15 | 解决时间:2007-9-14 10:02 | 提问者:liyufei05j3 最佳答案 经典C源程序100 ...

  3. C语言译密码字符串A变E,C语言经典编程算法

    <C语言经典编程算法>由会员分享,可在线阅读,更多相关<C语言经典编程算法(21页珍藏版)>请在人人文库网上搜索. 1.C语言经典编程算法汇集(不断补充)用pi/4=1-1/3 ...

  4. DL之LeNet-5:LeNet-5算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之LeNet-5:LeNet-5算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 LeNet-5算法的简介(论文介绍) LeNet-5算法的架构详解 1.LeNet-5 结构分 ...

  5. DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 ShuffleNetV2算法的简介(论文介绍) 1.论文特点 2.基于硬件 ...

  6. DL之R-CNN:R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之R-CNN:R-CNN算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 R-CNN算法的简介(论文介绍) 0.R-CNN算法流程图 1.实验结果 R-CNN算法的架构详解 R ...

  7. [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

  8. DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet V2:MobileNet V2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNetV2算法的简介(论文介绍) MobileNet V2算法 ...

  9. DL之DenseNet:DenseNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DenseNet:DenseNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 DenseNet算法的简介(论文介绍) DenseNet算法的架构详解 3.DenseNe ...

最新文章

  1. 刚上线就报名2000人!8位大牛免费讲座,再不报名就满额了!
  2. Spring Boot 2 (四):使用 Docker 部署 Spring Boot
  3. php 接口数组排序,php 数组排序
  4. spring源码分析,聊聊PropertyPlaceholderConfigurer
  5. [转载]Informix Dynamic Server维护手册
  6. 【C语言进阶深度学习记录】十七 宏定义的使用与分析
  7. 跑了10千米,再一次伤了膝盖
  8. QQ邮箱鸡肋存储型XSS漏洞利用
  9. visual studio for mac在线安装网络错误
  10. 中国精英这才是真相:我们需要信仰,我们需要思想导师
  11. 代码检测vc2013环境是否已经安装了
  12. [19保研]四川大学网络空间安全学院 关于举办2018年优秀大学生暑期夏令营的通知...
  13. GB/T 18487电动汽车充电领域国家标准解析 篇一(充电术语和定义)
  14. 两个通宵熬出来的互联网大厂最新面试题收集整理1000道(三-Memcached),欢迎点赞收藏!!!
  15. 机器学习入门之异常检测
  16. 刻薄是因为底子薄,尖酸是因为心里酸
  17. 几种经典的卷积神经网络
  18. 计算机word综合操作,『word2010表格操作及综合排版计算机实验报告』excle2010实验操作...
  19. 手把手教你打造全宇宙最强 Firefox 浏览器
  20. 计算机软件专业英语考试题,计算机水平考试-软件设计师分类模拟题计算机专业英语(二)...

热门文章

  1. 查看java运行时参数_查看JVM运行时参数
  2. 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc
  3. 平安京服务器维护无法发布新内容,决战平安京无法登陆怎么解决 无法登陆原因及解决方案一览_3DM手游...
  4. c语言leg 10,Leg massaging device
  5. java servlet文件下载_Servlet实现文件下载功能
  6. mysql 存储过程简单使用_mysql存储过程的简单使用教程
  7. linux简单邮件系统,怎样简单搭建一个Linux操作系统邮件服务器
  8. 计算机机房用发电机组,应急康明斯计算机机房用发电机组怎么选有窍门
  9. linux系统中agent服务器,Zabbix添加对Linux服务器的监控(Zabbix-Agent)
  10. matlab光学谐振腔稳区图,基于图像处理的光学谐振腔自准直研究方法