算法丑陋,时间略长,还望指教。
#include <stdio.h>
short queenplaces[92][8],col[8],line_135[15],line_45[15],now_place;//全局变量默认为0
void putqueen(int n)//n+1表示处理到哪个皇后了
{
short i,j;
if(n==8)
{
now_place++;
return;
}
for(i=0;i<8;i++)//i+1表示这一行皇后所在的列数
{
if(!col[i]&&!line_135[7-(i-n)]&&!line_45[i+n])
{
col[i]=line_135[7-(i-n)]=line_45[i+n]=1;
for(j=now_place;j<92;j++)
queenplaces[j][n]=i;
putqueen(n+1);
col[i]=line_135[7-(i-n)]=line_45[i+n]=0;
}
}
}
int main()
{
int num,i,j;
scanf("%d",&num);
int place[num];
putqueen(0);
for(i=0;i<num;i++)
scanf("%d",&place[i]);
for(i=0;i<num;i++)
{
for(j=0;j<8;j++)
printf("%d",queenplaces[place[i]-1][j]+1);
printf("\n");
}
return 0;
}