问题描述:
由14个“+”号和14个“-”号组成的符号三角形。
2个同号下面是“+”号,2个异号下面是“-”号。
如图:
+ + _ + _ + +
+ _ _ _ _ +
_ + + + _
_ + + _
_ + _
_ _
+
在一般情况下,符号三角形第一行有N个符号,该问题要求对于给定n计算有多少种不同的符号三角形。使其所含的+ — 个数相同。
算法设计:
1 x[i] =1 时,符号三角形的第一行的第i个符号为+
2 x[i] =0时,表示符号三角形的第一行的第i个符号位-
共有i(i+1)/2个符号组成的符号三角形。
3 确定x[i+1]的值后,只要在前面确定的符号三角形的右边加一条边就扩展为x[1:i+1]所相应的符号三角形。
4 最后三角形中包含的“+”“-”的个数都为i(i+1)/4,因此搜索时,个数不能超过i(i+1)/4,若超直接可以剪去分枝。
5 当给定的n(n+1)/2为奇数时,也不符合三角形要求。
算法实现: