试探算法

 

试探法,也成为回溯法,是一种系统的搜索问题的方法,下棋的时候棋手采用的就是试探法。

算法思路:

为了求得问题的解,先选择某一种可能的情况进行咨询,在试探过程中,一旦发现原来选择的假设情况是错误的,就得退回一步重新选择。继续向前试探,如此反复进行。直到得到解或者证明无解。

实例,生成彩票号码组合

假设有一种彩票,每注由7个1-29的数字组成,且这七个数字不能相同,编写程序生成所有的号码组合。

#include <stdio.h>
#define MAXN 7 //设置每一注彩票的位数
#define NUM 29 //设置组成彩票的数字 
int num[NUM];
int lottery[MAXN];
void combine(int n, int m){
    int i,j;
    for(i=n; i>=m; i--){
        lottery[m-1] = num[i-1];//保存一位数字 
        if(m>1){
            combine(i-1,m-1);
        }
        else{
            //如果m等于1,就输出一注号码
            for(j=MAXN-1; j>=0; j--){
                printf("%3d",lottery[j]);
                
            } 
            getch();
            printf("\n");
        }
    }
} 
int main(void){
    int i,j;
    for(i=0; i<NUM; i++){
        num[i] = i+1;
    }
    for(i=0; i<MAXN; i++){
        lottery[i] = 0;
    }
    combine(NUM,MAXN);
    getchar();
    return 0;
}

 

posted @ 2016-10-25 16:56  建彬  阅读(347)  评论(0编辑  收藏  举报