1. 程式人生 > >八皇后多解

八皇后多解

#include"stdio.h"
#include"string.h"
int NUM=0;
int col[8]={0},h[8]={0},left[15]={0},right[15]={0};
//將棋盤上的各斜線分成向左向右的兩組 各15條(right[15],left[15]),用於判斷該斜線上有沒有皇后
void queen(int i)
{
//遍歷每行的8個位置
for(int j=0;j<8;j++)
{
//判斷該位置可不可以放皇后
if(!col[j]&&!left[i+j]&&!right[7+i-j])
{
//放皇后
{
col[j]=1;
left[i+j]=1;
right[i+7-j]=1;
h[i]=j;
}
//如果能放則遞迴考察下一行
queen(i+1);
//考慮過該點後擦除放的皇后
{
col[j]=0;
left[i+j]=0;
right[i+7-j]=0;
}

}
//當i==8時時說明8行上面都擺了 列印皇后座標和計數 
if(i==8)
{
printf("%d\t",++NUM);
for(int x=0;x<8;x++)
{
printf("(%d,%d),",x,h[x]);
}
printf("\n");
}

int main()
{
queen(0);
}