admin 管理员组

文章数量: 1087677

C语言蓝桥杯刷题:受伤的皇后

题目链接

#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语言蓝桥杯刷题受伤的皇后