n后问题的c语言实现(极简)

本文介绍了一种使用回溯算法解决八皇后问题的方法。通过定义一个一维数组记录每个皇后的位置,采用递归的方式尝试每一种可能的摆放方式,避免皇后们在同一行、同一列或同一对角线上。代码中详细展示了如何检查冲突并调整皇后位置,最终输出所有可行的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#define n 9 
int row[n];//放置每个皇后位置的纵坐标,横坐标即皇后编号
void queen(int now){//now现在放的皇后的编号,即该皇后的横坐标
	int i;
	if(now==n){
		for(i=0;i<n;i++){
			printf("%d ",row[i]);
		}
		printf("\n\n");//printf("----------------------");
		return;
	}
		 
	int j;
	for(i=0;i<n;i++){//i表示正在放的皇后的位置,即该皇后的纵坐标 
		for(j=0;j<now;j++){//j表示已经放好的皇后的编号 
			if(i==row[j]||abs(now-j)==abs(i-row[j])){//判断是否在同一列  || 是否在对角线上 
				//如果在同一列或者在对角线上,那正在放的皇后应该换到下一个位置,而不再和已经放好的皇后进行比较 
				break;
			}
		}
		if(j==now){
			//进到这里说明j==now,即已经与放好的所有皇后进行了判断,现在的位置i可行,记录当前的位置 
			row[now]=i;
			//放下一个皇后 
			queen(now+1);
		}
	}
}
int main(){
	queen(0);
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值