有一个n*n的棋盘,在这个棋盘中放n个皇后,使得这n个皇后,任意两个皇后不在同一行,同一列,同一条对角线。例如,当n等于4时,有两种摆法。
给出数字n,输出各种摆法的布局形式。
类似于分叉树,只有通路到最后一排才能进行输出。
以4为例,第一排有四种情况,每种情况又有四种情况向第二排延伸。
#include<stdio.h>
#include<math.h>
int N;
int queenpos[100]={0};
void Nqueen(int n);
int main()
{
scanf("%d",&N);
Nqueen(1);
return 0;
}
void Nqueen(int n)
{
if(n==N+1){
for(int i=1;i<=N;i++){
for(int j=1;j<queenpos[i];j++)
printf("0 ");
printf("1 ");
for(int j=queenpos[i];j<N;j++)
printf("0 ");
printf("\n");
}
printf("\n");
}
else{
int j;
for(int i=1;i<=N;i++){
for(j=1;j<n;j++){
if(queenpos[j]==i||abs(queenpos[j]-i)==abs(j-n))
break;
}
if(j==n){
queenpos[j]=i;
Nqueen(n+1);
}
}
}
}