算法丑陋,速度略慢,还望指教。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
short queenplaces[92][8];//每个8位数组记录了那一列皇后所在的列index
short nowline=0;
short board[8][8];
void putqueen(int n)//n+1表示正在解决哪一个皇后了
{
short i,j,k;
if(n==8)
{
nowline++;
return;
}
for(i=0;i<8;i++)
{
if(board[i][n]==0)
{
for(j=nowline;j<92;j++)
queenplaces[j][n]=i;
board[i][n]=1;
for(j=0;j<8;j++)
for(k=0;k<8;k++)
(board[j][k]==0&&(i==j||n==k||abs(i-j)==abs(k-n)))?(board[j][k]=n+1):0;
putqueen(n+1);
for(j=0;j<8;j++)
for(k=0;k<8;k++)
(board[j][k]==n+1&&(i==j||k==n||abs(i-j)==abs(k-n)))?(board[j][k]=0):0;
board[i][n]=0;
}
}
}
int main()
{
short i,j,k;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
board[i][j]=0;
putqueen(0);
for(i=0;i<92;i++)
{
printf("No. %d\n",i+1);
for(j=0;j<8;j++)
{
for(k=0;k<8;k++)
(j==queenplaces[i][k])?(printf("1 ")):(printf("0 "));
printf("\n");
}
}
return 0;
}