好久没有更新了,以后会在CSDN上不定期更新自己的一些代码,希望明天的自己能够更加努力!加油~
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define N 8
static int sum,x[N]; //sum用于记录解法,x[N]记录皇后的位置
int judge(int t) //判断当前所下的皇后是否与棋盘上的皇后相冲突
{
int i;
for(i=0;i<t;i++)
if(abs(x[t]-x[i])==abs(i-t)||x[t]==x[i])
return 0;
return 1;
}
void display( ) //打印棋盘
{
int i,j;
sum++;
printf("\n\n第%d种解法 !\n",sum);
for(i=0;i<N;i++)
{
if(i==0)
printf("╓════╤════╤════╤════╤════╤════╤════╤════╖\n");
for(j=0;j<N;j++)
{
if(j==0)
printf("║");
switch(x[i]==j)
{
case 0:printf(" ");break;
case 1:printf(" ● ");break;
}
if(j<N-1)
printf("║");
if(j==N-1)
printf("║\n");
}
if(i<N-1)
printf("╠════╫════╫════╫════╫════╫════╫════╫════╢\n");
if(i==N-1)
printf("╙════╧════╧════╧════╧════╧════╧════╧════╜");
}
}
void think(int k)
{
int i;
if(k==N) //可以抽象的理解为构造了一棵状态搜索树,当遍历到叶子结点时打印
display( );
else
{
for(i=0;i<N;i++)
{
x[k]=i;
if(judge(k))
think(k+1);
}
}
}