C语言回溯法 实现组合数 从N个数中选择M个数

 更新时间:2018年08月11日 16:19:42   作者:Alger_jhun  
在平时的算法的题目中,时常会遇到组合数相关的问题,暴力枚举。在N个数中挑选M个数出来。利用for循环也可以处理,但是可拓展性不强,于是写这个模板供以后参考

前言

在平时的算法的题目中,时常会遇到组合数相关的问题,暴力枚举。在N个数中挑选M个数出来。利用for循环也可以处理,但是可拓展性不强,于是写这个模板供以后参考。

两个函数和全局变量可以直接用。

代码:

#include<iostream>
#include<cstdio>
 
#define N 10    //被选择的数目
#define M 5    //要选出来的数目
 
using namespace std;
int vis[N+1];    //标志,
int ans=0;    //含有的组合数 的数量
int num[M+1];    //选出来的数放在num数组里面
 
void solve() {        //在solve函数里面处理
	for(int i=1; i<M+1; i++)
		cout<<num[i]<<" ";
	cout<<endl;
}
 
void dfs(int index) {    //挑选的第index+1个数
	if(index == M) {
		solve();
		ans++;	
		return ;
	}
	for(int i=num[index]+1; i<N+1; i++) {
		if(!vis[i]) {
			vis[i] = 1;
			num[index+1] = i;
			dfs(index+1);
			vis[i] = 0;
		}
	}
}
 
int main()
{
	dfs(0);    //回溯开始
	cout<<endl<<ans;
	return 0;
}

可以发现利用回溯法挑选的有一个优势在于,输出的数组是经过排序的。

相关文章

  • C++实现二维图形的打印

    C++实现二维图形的打印

    大家好,本篇文章主要讲的是C++实现二维图形的打印,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 牛顿迭代法求多项式在1.5附近的值2*x的3次幂--4x平方+3*x-6=0的实现代码

    牛顿迭代法求多项式在1.5附近的值2*x的3次幂--4x平方+3*x-6=0的实现代码

    以下代码是使用了牛顿迭代法求多项式在1.5附近的值 2*x的3次幂 - 4x的平方 + 3*x -6=0的实例。需要的朋友参考下吧
    2013-05-05
  • 浅析C++中的间接宏函数

    浅析C++中的间接宏函数

    这篇文章主要介绍了C++中的间接宏函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C++经典例题之字符串特定规则反转问题的解法

    C++经典例题之字符串特定规则反转问题的解法

    这篇文章主要介绍了如何解决字符串反转问题,通过将字符串按每2k个字符为一个区间进行划分,并使用双指针方法来确定实际反转的边界,最终实现字符串按特定规则进行反转,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • C++模拟Linux Shell编写一个自定义命令

    C++模拟Linux Shell编写一个自定义命令

    这篇文章主要介绍了C++如何模拟Linux Shell实现编写一个自定义命令,本文通过实例代码进行命令行解析,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • C++超详细实现二叉树的遍历

    C++超详细实现二叉树的遍历

    本章将会详细讲解二叉树遍历的四种方式,分别为前序遍历、中序遍历、后续遍历和层序遍历。在学习遍历之前,会先带大家回顾一下二叉树的基本概念
    2022-05-05
  • C语言实现在windows服务中新建进程的方法

    C语言实现在windows服务中新建进程的方法

    这篇文章主要介绍了C语言实现在windows服务中新建进程的方法,涉及C语言进程操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 一文详解C++中动态内存管理

    一文详解C++中动态内存管理

    这篇文章主要介绍了一文详解C++中动态内存管理,文章围绕主题展开详细的内容介绍,具有一定的参考价孩子没需要的朋友可以才可以参考一下
    2022-07-07
  • C++实现批量提取PDF内容

    C++实现批量提取PDF内容

    这篇文章主要为大家详细介绍了如何使用C++批量提取PDF里文字内容并导出到表格以及批量给 PDF 文件改名,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • C++中的多态问题—理解虚函数表及多态实现原理

    C++中的多态问题—理解虚函数表及多态实现原理

    这篇文章主要介绍了C++中的多态问题—理解虚函数表及多态实现原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论