下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。
在一般情况下,符号三角形的第一行有n个符号。
符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。
n=3时 的符号三角形
输入一个n ,输出满足条件的符号三角形的个数
问题分析:
根据输入的n,计算符号三角形中符号的总数(N=n(n+1)/2).
如果N 为奇数:
则不存在符合条件的符号三角形。
如果N为偶数:
则用回溯法尝试构造符号三角形。
回溯过程:
符号三角形的特点
第1层有n个符号
第2层有n-1个符号
。。。。。。
第n层有1个符号
倒三角形(底边在上)
#include <iostream>
using namespace std;
class Triangle {
private:
int n, //第一行的符号个数
half, //n*(n+1)/4
count, //当前"+"号个数
**p; //符号三角矩阵
long sum; //已找到的符号三角形数
public:
Triangle(int a=0);
void Backtrack(int i);
int get_sum(){
return sum;}