Description
在n×n格的国际象棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。
Input
输入为一个整数,即题面中的n
Output
输出为一个整数,即可行的摆法数量
Sample Input 1
1
Sample Output 1
1
Sample Input 2
2
Sample Output 2
0
代码部分:
#include <stdio.h> #define MaxNum 500 int diags1[MaxNum]; int diags2[MaxNum]; int rows[MaxNum]; int cols[MaxNum]; int state[MaxNum][MaxNum]; int row = 0; int result = 0; int n; void thequeen(){ if(row == n) { result++; return; } for(int col=0; col<n; col++){ int diag1 = row - col + n - 1; int diag2 = row + col; if(diags1[diag1] == 0 && diags2[diag2] == 0 && cols[col] ==0){ state[row][col] = 1; cols[col] = diags1[diag1] = diags2[diag2] = 1; row++; thequeen(); state[row][col] = 0; cols[col] = diags1[diag1] = diags2[diag2] = 0; row--; } } } int main(){ scanf("%d",&n); thequeen(); printf("%d",result); return 0; }
941

被折叠的 条评论
为什么被折叠?



