八皇后的问题和马踏棋盘的思路是一样,都用到了回溯的思想。代码也都差不多。这个里面最精彩的地方用4个一位数组表示了这个棋盘。这个里面总共有92组解
代码展示
#include<stdio.h>
#include<stdlib.h>
int col[8]={0};
int right[15]={0};
int left[15]={0};
int Queen[8];
int cnt; //全局变量
void print();
void insertQueen(int );
void insertQueen(int i)
{
for(int j=0;j<8;j++)
{
if(col[j]==0&&right[i+j]==0&&left[i-j+7]==0) //判断是否可以放
{
Queen[i]=j; //放皇后
col[j]=1;
right[i+j]=1;
left[i-j+7]=1;
if(i<7)
insertQueen(i+1); //递归
else
{
print();
}
col[j]=0; //清除标记,查找下一组的解
right[i+j]=0;
left[i-j+7]=0;
}
}
}
void print()
{
int i,j;
printf("输出第%d组解\n",++cnt);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(Queen[i]==j)
printf("■");
else
printf("□");
}
printf("\n");
}
}
int main()
{
insertQueen(0);
return 0;
}