#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#define N 8 //皇后数=棋盘行列数
int a[N]; //a[i]为第i行皇后所在列
void show() //图形化输出
{
int i;
int p,q ;
int b[N][N]={0};
static t=1;
printf("第%d个解为: ",t++);
for(i=0;i<N;i++)
{
b[i][a[i]]=1;
printf("(%d,%d) ",i,a[i]);
}
printf("\n");
for(p=0;p<N;p++)
{
for(q=0;q<N;q++)
{
if(b[p][q]==1)
printf("●");
else
printf("○");
}
printf("\n");
}
}
int check(int n) //满足条件返回1,否则返回0
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==a[n]||fabs(n-i)==fabs(a[i]-a[n])) //at the same column or diagonal (对角线)
return 0;
}
return 1;
}
void put(int n) //在第n行放置第n个皇后
{
int i;
if(n==N)
return ;
for(i=0;i<N;i++)
{
a[n]=i;
if(check(n)) //位置合法
{
if(n==N-1) //皇后全部放置完毕
show();
else
put(n+1);
}
}
}
int main ()
{
put(0);
return 0;
}
第一次实验--八皇后及N皇后问题
最新推荐文章于 2018-12-11 18:43:33 发布