六、试探算法
算法思路
为了求得问题的解,先选择某一种可能情况进行试探,在试探过程中,旦发现原来的选择的假设情况是错误的,就退回一步重新选择,继续向前试探,如此反复进行,直至得到解或证明无解
实例:生成彩票号码组合
假设有一种彩票,每注由7个1~29的数字组成,且这7个
数字不能相同,编写程序生成所有的号码组合。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define HAXN 7 //设置每一注彩票的位数
#define NUH 29 //设置组成彩票的数字
int num[NUH];
int lottery[HAXN];
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=i,输入一注号码
{
for (j = HAXN - 1; j >= 0; j--)
{
printf("%3d", lottery[j]);
}
getchar();
printf("\n");
}
}
}
int main()
{
int i;
for (i = 0; i < NUH; i++)//设置彩票的个位数
{
num[i] = 1 + i;
}
for (i = 0; i < HAXN; i++)//初始化数组lottecy
lottery[i] = 0;
combine(NUH, HAXN);
return 0;
}