#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int arr[10];//arr[i]=j表示第i个皇后放在了j列,这样的一维数组相对二维更加节省空间
int n = 0;
int sum = 0;
int check(int r, int c)//判断r行c列是否可放置皇后,可以返回1,否则返回0
{
for (int i = 0;i < r;i++)//判断前r行的是否与该位置冲突
{
if (arr[i] == c)//同列
{
return 0;
}
//两对角线
if ((abs(i - r) == abs(arr[i] - c)) && abs(r - i) <3)
{
return 0;
}
}
return 1;
}
void dfs(int r)//从r行开始判断
{
if (r == n)
{
sum++;
return;
}
for (int c = 0;c < n;c++)//寻找r行可以放的列
{
if (check(r, c))
{
arr[r] = c;
dfs(r + 1);
arr[r] = 0;
}
}
}
int main(int argc, char *argv[])
{
scanf("%d", &n);
dfs(0);
printf("%d", sum);
return 0;
}
C语言蓝桥杯刷题:受伤的皇后
最新推荐文章于 2023-03-30 20:31:46 发布