N皇后问题
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
假设现在有4个皇后,要求放在4Í4的棋盘上,要求给出所有的摆放方式。
这里不需要设置二维数组,直接用i表示列a[i]表示行就可以了。
代码:
#include<stdio.h>
#define MAX 10
#define n 4 //4个皇后
int a[MAX];//第i个皇后在a[i]上
int sum = 0;
int detection(int x,int y) {//判断是否能放
for (int i = 1; i <= x; i++) {
if (a[i] == y)return 0;//|有皇后
if (i + a[i] == x + y)return 0;//斜边右边有皇后
if (i - a[i] == x - y)return 0;//斜边左边有皇后
}return 1;//可以放皇后
}
void queen(int row) {//第row个皇后在?
if (row == n + 1) {
sum++;//完成了一组解答
printf("解法%d:",sum);
for (int k = 1; k < n; k++) {
printf("%d", a[k]);
}printf("\n");
return;