选择问题

从m个数当中选择n个数,01规划结合搜索算法,

用递归函数写的,感觉效率不高,测试了一下用例24 12,感觉程序实在是跑不动了,不过对于一些小的用例还是可以的,在想办法优化了,

闲话少叙,上代码:

#include <iostream>
using namespace std;
int data[25];
int sum=0;

void selectnfromm(int m,int n,int t)           //t表示进入到第t层递归,即判断是否要挑选第t个数
{
    if(t==m)                        //判断是否已经检查了m个数
    {
        int k=0;
        for(int i=0;i<m;i++)
           if(data[i]==1)
                k++;                //对于当前已经挑选的数计数;
        if(k==n)                    //判断是否是一个可行的方案
        {
            sum++;                  //方案数计算
            for(int i=0;i<m;i++)    //打印该方案
            if(data[i]==1)
            cout<<(i+1);
            cout<<endl;
        }
    }
    else
    {
        if(t<m)                      //搜索所有的方案
        {
            data[t]=1;               //赋值为1使递归
            selectnfromm(m,n,t+1);
            data[t]=0;               //赋值为0使递归
            selectnfromm(m,n,t+1);
        }
    }
}

int main()
{
    int m,n;
    cout<<"输入m和n,从m中选n个(n<m<25):"<<endl;
    cin>>m>>n;
    for(int i=0;i<m;i++)
    data[i]=0;
    int t=0;
    cout<<"所有方案为:"<<endl;
    selectnfromm(m,n,t);
    cout<<"Sum:"<<sum<<endl;
}





态度决定高度,细节决定成败,
原文地址:https://www.cnblogs.com/lxk2010012997/p/3139182.html