利用回溯(试探)法生成彩票组合

来源:互联网 发布:神漫画软件下载 编辑:程序博客网 时间:2024/06/05 15:59

常见的彩票号码都是由一些数字组成的,生成彩票的号码其实就是将所有的数字进行不同的组合。例如,假设有一种彩票,每注由7个1-29的数字组成,且这7个数字不能相同,编写程序生成所有的号码组合:


#include<iostream>#include<windows.h>#define num 7#define max 20using namespace std;int temp[max];int  con[num];void resort(int a,int b);int main(){    for(int i=0;i<max;i++)        temp[i]=i+1;    for(int i=0;i<num;i++)        con[num]=0;    resort(num,max);    return 0;}void resort(int a,int b)//a代表8{    for(int i=b;i>=a;i--)    {        con[a-1]=temp[i-1];        if(a>1)        {            resort(a-1,i-1);        }        else        {            for(int i=num-1;i>=0;i--)                cout<<con[i]<<" ";          system("PAUSE");          cout<<endl;        }    }}



代码如上,我们可以得到试探算法的一般结构:

对解集合中各解进行试探

IF(满足条件)

保存结果

if(完成集合中所有解的试探)

输出解

else

重复本过程进行下一步的试探(递归调用本函数)

}else{

恢复本过程保存结果之前的状态,进行另一步试探。



0 0
原创粉丝点击