子集树与排列树搜索算法

排列树

void Backtrack(int t) {
	if (t > n)
		Output(x);
	else {
		for (int i = t;i <= n;i++) {
			Swap(x[t], x[i]);
			if (Constraint(t) && Bound(t))
				Backtrack(t + 1);
			Swap(x[t], x[i]);
		}
	}
}

子集树

void Backtrack(int t) {
	if (t > n)
		Output(x);
	else {
		for (int i = 1;i <= 1;i++) {
			x[i] = i;
			if (Constraint(t) && Bound(t))
				Backtrack(t + 1);
		}
	}
}

你可能感兴趣的:(算法设计与分析)