n 皇后问题

如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?

即任两个皇后都不能处于同一条横行、纵行或斜线上。

深搜

  // n 皇后问题 
#include<stdio.h>
#include<cstring>
#include<math.h>
int count = 0, n;
int a[20], b[20];  // a:行  ,b:列 
void judge(){
	int i, j;
	for(i = 1; i <= n; i++){
		for(j = i+1; j <= n; j++){
			//  判断任意两个皇后是否在同一斜线上 
			if((j-i) == abs(a[j] - a[i]))
				return ;
		}
	}
	count++;	
}

void dfs(int m){
	int i;
	if(m > n)
		judge();
	for(i = 1; i <= n; i++){
		if(b[i]){       // 如果当前列未被使用 
			b[i] = 0; 
			a[m] = i;
			dfs(m+1);
			b[i] = 1;
		}
	}	
}
int main(){
	int i;
	scanf("%d", &n); 
	// 给列数组全赋值为1  ,1未使用, 0已使用 
	for(i = 0; i <= n; i++){
		b[i] = 1;
	}
	
	dfs(1);
	printf("%d", count);
	return 0;
} 

8皇后:92种

9皇后:350种

10皇后:724种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值