题目描述:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,有多少种摆法。
#include <cstdio>
#include <cstring>
void Ri(int k);
int S[8];//标记列。
int L[15];//标记左斜行。
int R[15];//标记右斜行。
int Ans = 0;
int main() {
memset(S, 0, sizeof(S));
memset(L, 0, sizeof(L));
memset(R, 0, sizeof(R));
Ri(0);
printf("%d", Ans);
return 0;
}
void Ri(int k) {
if(k == 8) {
Ans++;
} else {
for(int a=0; a<8; a++) {
if(S[a]==0 && L[7-k+a]==0 && R[k+a]==0) {
S[a] = 1;
L[7-k+a] =1;
R[k+a] = 1;
Ri(k+1);
S[a] = 0;
L[7-k+a] =0;
R[k+a] = 0;
}
}
}
return;
}
p.s.:八皇后问题可用多种方法来证明。传送门