八皇后问题(粗暴方法)

粗暴方法,就前面提到的,八层for循环,写入条件,判断,最终得出结果。
但在后边实现时候突然卡住,想到八个皇后占8*8的位置,第一个皇后随意到一个格子,其他皇后继续随意进入到一个格子,把问题想成了随机摆放,所以卡住了,后边重新简化问题,直接把各个皇后放在固定一行,问题就直接用简单的八层循环就好。
代码如下,可以看到确实实现过程很繁琐,简化的话可以写一个判断函数,然后最后调用,就不用写这么多判断语句了,这里就不实现了,
有时间实现一下汉诺塔再继续总结进来。

int Eque()
{
	int tmp = 0;
	int que[8];
	for(que[0] = 0;que[0] <= 7;++ que[0])
	{
		for(que[1] = 0;que[1] <= 7;++ que[1])
		{
			if(que[1] == que[0] || abs(que[1]-que[0]) == 1)
			{
				continue;
			}
			for(que[2] = 0;que[2] <= 7;++ que[2])
			{
				if(que[1]==que[2] || que[0]==que[2] || abs(que[1]-que[2]) == 1 || abs(que[0]-que[2]) == 2)
				{
					continue;
				}
				for(que[3] = 0;que[3] <= 7;++ que[3])
				{
					if(que[3]==que[2] || que[1]==que[3] || que[3]==que[0]|| abs(que[3]-que[2]) == 1 || abs(que[3]-que[1]) == 2 || abs(que[3]-que[0])==3)
					{
						continue;
					}
					for(que[4] = 0;que[4] <= 7;++ que[4])
					{
						if(que[3]==que[4] ||que[2]==que[4]||que[1]==que[4]||que[0]==que[4]|| abs(que[3]-que[4]) == 1 || abs(que[4]-que[2]) == 2 || abs(que[4]-que[1])==3 || abs(que[4]-que[0])==4)
						{
							continue;
						}
						for(que[5] = 0;que[5] <= 7;++ que[5])
						{
							if(que[5]==que[4] ||que[5]==que[3]||que[5]==que[2]||que[5]==que[1]||que[5]==que[0]|| abs(que[5]-que[4])==1 || abs(que[3]-que[5]) == 2 || abs(que[5]-que[2]) == 3 || abs(que[5]-que[1])==4 || abs(que[5]-que[0])==5)
							{
								continue;
							}
							for(que[6] = 0;que[6] <= 7;++ que[6])
							{
								if(que[5]==que[6] ||que[4]==que[6]||que[3]==que[6]||que[2]==que[6]||que[1]==que[6]||que[0]==que[6]|| abs(que[6]-que[5])==1 || abs(que[6]-que[4])==2 || abs(que[3]-que[6]) == 3 || abs(que[6]-que[2]) == 4 || abs(que[6]-que[1])==5 || abs(que[6]-que[0])==6)
								{
									continue;
								}
								for(que[7] = 0;que[7] <= 7;++ que[7])
								{
									if(que[7]==que[6] ||que[7]==que[5]||que[7]==que[4]||que[7]==que[3]||que[7]==que[2]||que[7]==que[1]||que[7]==que[0]|| abs(que[7]-que[6])==1 || abs(que[7]-que[5])==2 || abs(que[7]-que[4])==3 || abs(que[3]-que[7]) == 4 || abs(que[7]-que[2]) == 5 || abs(que[7]-que[1])==6 || abs(que[7]-que[0])==7)
								{
									continue;
								}
									printf("皇后1:%d  皇后2:%d  皇后3:%d  皇后4:%d  皇后5:%d  皇后6:%d  皇后7:%d  皇后8:%d\n",que[0],que[1],que[2],que[3],que[4],que[5],que[6],que[7]);
									tmp ++;
								}
							}
						}
					}
				}
			}
		}
	}
	printf("%d种\n",tmp);
	return 0;
}

代码也没难度,就照着规则,皇后不能同列(因为已经将皇后放在固定行所以此要求自动满足),皇后不能对角线,就🆗了,就这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值