bool board[8][8]={0};
int num=0; //满足条件的个数
int inix,iniy; //输入一个皇后的初始位置
void output() //输入
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(!board[i][j])
printf("0");
else printf("1");
}
printf("\n");
}
num++;
printf("\n\n");
return;
}
bool check(int x,int y) //判断是否能放
{
int i,j;
for(i=0;i<8;i++)
{
if(board[i][y]==1)
return false;
}
for(i=0;i<8;i++)
{
if(board[x][i]==1)
return false;
}
i=x;j=y;
while(i>0 && j>0){i--;j--;}
for(;i<8 && j<8;i++,j++)
if(board[i][j]==1)
return false;
i=x;j=y;
while(i>0 && j<7){i--;j++;}
for(;i<8 && j>=0;i++,j--)
if(board[i][j]==1)
return false;
return true;
}
void search(int x,int num) //搜索函数
{
int i;
if(num>=8){output();return;}
if(x==inix-1)search(inix,nmu+1);
else
{
for(i=0;i<8;i++)
{
if(check(x,i))
{
board[x][i]=1;
search(x+1,num+1);
board[x][i]=0;
}
}
}
return;
}
int main()
{
scanf("%d,%d",&inix,&iniy);
board[inix-1][iniy-1]=1;
search(0,0);
printf("%d\n",num);
return 0;
}
Entertr 于 2012-06-17 09:03:42发表:
帮顶下