问题:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。
#include<stdio.h>
//FILE *fp=fopen("E:\\huihui.txt","w");
int sum=0;//计算方法数
int a[10][10];
bool judge(int x,int y)//判断该坐标上放的部分:竖,正负对角线是否有皇后
{
for(int i=0;i<x;++i)//竖向判断是否有皇后
{if(a[i][y]) return 0;
}
for(int i=x,j=y; i>=0 && j>=0;--i,--j)//正对角线
{if(a[i][j]) return 0;
}
for(int i=x,j=y;i>=0 && j<8;--i,++j)//负对角线
{if(a[i][j]) return 0;
}
return 1;
}
void fun(int n)
{
if(n==8)
{++sum;
// for(int i=0;i<=7;i++)
// {
// for(int j=0;j<=7;j++)
// {if(a[i][j]==1)
// fprintf(fp," 1 ");
// else
//fprintf(fp," □");
//}
//fprintf(fp,"\n");}
//fprintf(fp,"-------------------------------------------\n");
return ;
}
for(int i=0;i<8;++i)
{
if(judge(n,i))//判断皇后是否符合条件
{
a[n][i]=1;
fun(n+1);
a[n][i]=0;//回溯
}
}
}
int main()
{
fun(0);
printf("%d\n",sum);
return 0;
}