#include <stdio.h>
int n;//阶数
int count = 0;//计数
int p[14];//存放
int sign[3][30];//判重
void Queen(int row) {
int i, j;
if(row == n) {
count++;
if(count <= 3) {
for(i=0; i<n-1; i++)
printf("%d ", p[i]+1);//注意格式输出
printf("%d", p[n-1]+1);
printf("\n");
return ;
}
}
for(j=0; j<n; j++) {
//sign[0][j]表示第j列, sign[1][row+j]表示副对脚线, sign[2][row-j+13]表示主队脚线
if(!sign[0][j] && !sign[1][row+j] && !sign[2][row-j+13]) {
p[row] = j;
sign[0][j] = 1;
sign[1][row+j] = 1;
sign[2][row-j+13] = 1;
Queen(row+1);//回溯
sign[0][j] = 0;
sign[1][row+j] = 0;
sign[2][row-j+13] = 0;
}
}
}
int main(void) {
scanf("%d", &n);
Queen(0);
printf("%d\n", count);
return 0;
}
N皇后改进、、判重加快(回溯法)
最新推荐文章于 2022-01-17 19:55:10 发布