二、穷举搜索法 /}E2Rr?{
X:Wd%CHP
穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 v.8kGF
【问题】 将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 E~WbV+,3
程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测试由它们排成的如图所示的三角形三条边上的变量之和是否相等,如相等即为一种满足要求的排列,把它们输出。当这些变量取尽所有的组合后,程序就可得到全部可能的解。细节见下面的程序。 ]j:k!=Ss?
【程序1】 hzM;{g>t
# include <stdio.h> 2qE_SSXn
void main() O D N_i
{ int a,b,c,d,e,f; Yz0fOX
for (a=1;a<=6;a++) t27UlFX
for (b=1;b<=6;b++) { 2c[HA
if (b==a) continue; :tO4LEb
for (c=1;c<=6;c++) { zuN(~>YH
if (c==a)||(c==b) continue; %/e'6g<
for (d=1;d<=6;d++) { tKUW
if (d==a)||(d==b)||(d==c) continue; yW'{Z]09
for (e=1;e<=6;e++) { c]x-mj =
if (e==a)||(e==b)||(e==c)||(e==d) continue; "1Hn?4nz5
f=21-(a+b+c+d+e); lG0CCOdQ
if ((a+b+c==c+d+e))&&(a+b+c==e+f+a)) { PZ6R+n8
printf(“%6d,a); Q`8-|(ngw
printf(“%4d%4d”,b,f); BZ.l[LMp
printf(“%2d%4d%4d”,c,d,e); ${z#{c1
scanf(“%*c”); Ey:?!
} [6RODp3')
} meV Z_f/
} <B|b'XVH2
} $Q#n'#c
} -j<E_!t
} &_