C語言回溯法 實現(xiàn)組合數(shù) 從N個數(shù)中選擇M個數(shù)
更新時間:2018年08月11日 16:19:42 作者:Alger_jhun
在平時的算法的題目中,時常會遇到組合數(shù)相關(guān)的問題,暴力枚舉。在N個數(shù)中挑選M個數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強,于是寫這個模板供以后參考
前言
在平時的算法的題目中,時常會遇到組合數(shù)相關(guān)的問題,暴力枚舉。在N個數(shù)中挑選M個數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強,于是寫這個模板供以后參考。
兩個函數(shù)和全局變量可以直接用。
代碼:
#include<iostream>
#include<cstdio>
#define N 10 //被選擇的數(shù)目
#define M 5 //要選出來的數(shù)目
using namespace std;
int vis[N+1]; //標志,
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個數(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)利用回溯法挑選的有一個優(yōu)勢在于,輸出的數(shù)組是經(jīng)過排序的。
相關(guān)文章
牛頓迭代法求多項式在1.5附近的值2*x的3次冪--4x平方+3*x-6=0的實現(xiàn)代碼
以下代碼是使用了牛頓迭代法求多項式在1.5附近的值 2*x的3次冪 - 4x的平方 + 3*x -6=0的實例。需要的朋友參考下吧2013-05-05
C++經(jīng)典例題之字符串特定規(guī)則反轉(zhuǎn)問題的解法
這篇文章主要介紹了如何解決字符串反轉(zhuǎn)問題,通過將字符串按每2k個字符為一個區(qū)間進行劃分,并使用雙指針方法來確定實際反轉(zhuǎn)的邊界,最終實現(xiàn)字符串按特定規(guī)則進行反轉(zhuǎn),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-03-03
C語言實現(xiàn)在windows服務(wù)中新建進程的方法
這篇文章主要介紹了C語言實現(xiàn)在windows服務(wù)中新建進程的方法,涉及C語言進程操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C++中的多態(tài)問題—理解虛函數(shù)表及多態(tài)實現(xiàn)原理
這篇文章主要介紹了C++中的多態(tài)問題—理解虛函數(shù)表及多態(tài)實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

