一、问题描述
问题描述:在N×N格的国际象棋上摆放N个皇后,使其不能互相攻击,即不能处于同一列或同一行,也不能处在同一斜线上,请问有多少种摆法?
不能放皇后的位置及位置之间的关系:
二、代码实现
#include <stdio.h>
int array[20];//数组大小,a[i] = j表示第i个皇后放在第i行的第j个位置
int n,cnt;//n为皇后的个数
int check(int x,int y)//x为行,y为放置的位置
{
int i = 1;
for(;i <= x ;i++)
{
if(array[i] == y)return 0;//前面几行已经在y位置上有元素
if(array[i] + i == x + y)return 0;//上右下左对角线
if(i - array[i] == x-y)return 0;//上左下右对角线
}
return 1;
}
void dfs(int row)//第row个皇后
{
int i,j;
if(row == n+1)//此时已有一个解
{
cnt++;
for(j=1;j<=n;j++)
{
pri