最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言回溯法 實(shí)現(xiàn)組合數(shù) 從N個(gè)數(shù)中選擇M個(gè)數(shù)

 更新時(shí)間:2018年08月11日 16:19:42   作者:Alger_jhun  
在平時(shí)的算法的題目中,時(shí)常會(huì)遇到組合數(shù)相關(guān)的問題,暴力枚舉。在N個(gè)數(shù)中挑選M個(gè)數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強(qiáng),于是寫這個(gè)模板供以后參考

前言

在平時(shí)的算法的題目中,時(shí)常會(huì)遇到組合數(shù)相關(guān)的問題,暴力枚舉。在N個(gè)數(shù)中挑選M個(gè)數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強(qiáng),于是寫這個(gè)模板供以后參考。

兩個(gè)函數(shù)和全局變量可以直接用。

代碼:

#include<iostream>
#include<cstdio>
 
#define N 10    //被選擇的數(shù)目
#define M 5    //要選出來的數(shù)目
 
using namespace std;
int vis[N+1];    //標(biāo)志,
int ans=0;    //含有的組合數(shù) 的數(shù)量
int num[M+1];    //選出來的數(shù)放在num數(shù)組里面
 
void solve() {        //在solve函數(shù)里面處理
	for(int i=1; i<M+1; i++)
		cout<<num[i]<<" ";
	cout<<endl;
}
 
void dfs(int index) {    //挑選的第index+1個(gè)數(shù)
	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;
}

可以發(fā)現(xiàn)利用回溯法挑選的有一個(gè)優(yōu)勢(shì)在于,輸出的數(shù)組是經(jīng)過排序的。

相關(guān)文章

最新評(píng)論

公安县| 思茅市| 土默特右旗| 关岭| 辽宁省| 乐昌市| 银川市| 永年县| 久治县| 蛟河市| 昭苏县| 鸡西市| 社会| 漠河县| 沧源| 阆中市| 蛟河市| 碌曲县| 秀山| 炎陵县| 万源市| 通许县| 文安县| 丹棱县| 河间市| 筠连县| 杭锦后旗| 城固县| 长春市| 合山市| 崇义县| 林周县| 昌图县| 铜川市| 广汉市| 靖宇县| 淅川县| 葫芦岛市| 绵阳市| 晋州市| 婺源县|