#include<stdio.h>
#include<stdlib.h>
#define MAX 20
int queen[MAX];
int count=0;
int quen[MAX];
void print(int n)
{
// count++;
// printf("%d/n",count);
// if(count>2) exit(1);
int k=0;
if(k) exit(1);
for(int i=1;i<=n;i++)
// printf("%d %d/n",i,queen[i]);
{
// quen[i]=queen[i];
printf("%d %d/n",i,queen[i]);
k++;
}
// printf("/n");
}
/*
void display(int n)
{
for(int i=1;i<=n;i++)
printf("%d %d/n",i,quen[i]);
}
*/
int find(int i,int k)//i 表示行,k 表示列。
{
int j;
j=1;
while(j<k)
{
if((queen[j]==i)||(abs(queen[j]-i)==abs(j-k)) )//是否在同一行或在其对角线上
return 0;
j++;
}
return 1;
}
void place(int k,int n)
{
if(k>n)
{
// print(n);
// count++;
print(n);
exit(0);
}
else
{
for(int j=1;j<=n;j++)
{
if(find(j,k))//j,n分别表示行、列
{
queen[k]=j;
place(k+1,n);
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
/*
if(n<1 || n>13 ||n==2||n==3)
{
printf("%d",0);
return 0;
}
*/
place(1,n);
// printf("%d/n",count);
// print(n);
// display(n);
return 0;
}
递归法算n皇后问题
最新推荐文章于 2024-01-20 20:51:42 发布