4.3.1分治
4.3.2 递归
1、n的阶乘
2、斐波那契
3、全排列
4、n皇后
void generateP (int index) {
if(index == n + 1){ //递归边界,生成一个合法方案
count++;// 能到达这里的一定是合法的
return;
}
for(int x = 1; x<=n;x++) {//第x行
if (hashTable[x] == false) { //第x行还没有皇后
bool flag = true; //flag为true表示当前皇后不会和之前的皇后冲突
for(int pre = 1;pre < index; pre++) { //遍历之前的皇后
//第index列皇后的行号为x,第pre列皇后的行号为P[pre]
if (abs (index - pre) == abs(x - P[pre])) {
flag = false; //与之前的皇后在一 条对角线, 冲突
break;
}
}
if(flag) { //如果可以把皇后放在第x行
P[index]= x; //令第index列皇后的行号为x
hashTable[x] = true; //第x行已被占用
generateP (index + 1) ;//递归处理第index+1行皇后
hashTable[x] = false;//递归完毕,还原第x行为未占用
}
}
}
}