试探法,也成为回溯法,是一种系统的搜索问题的方法,下棋的时候棋手采用的就是试探法。
算法思路:
为了求得问题的解,先选择某一种可能的情况进行咨询,在试探过程中,一旦发现原来选择的假设情况是错误的,就得退回一步重新选择。继续向前试探,如此反复进行。直到得到解或者证明无解。
实例,生成彩票号码组合
假设有一种彩票,每注由7个1-29的数字组成,且这七个数字不能相同,编写程序生成所有的号码组合。
#include#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