n皇后算法(递归回溯)(C语言)

本文介绍了如何使用递归回溯法解决N皇后问题,以C语言实现。在n×n棋盘上放置n个互不攻击的皇后,并展示了4皇后和8皇后问题的解决方案。关键在于通过判断斜边位置避免皇后之间的冲突。
摘要由CSDN通过智能技术生成

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

基础不扎实的计算机小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值