八皇后(c语言极简版)

八个皇后 , 分布在八行八列 , 任意两个皇后不能在同一行 ( 每一行一定有一个皇后 ), 任意两个皇后不能 在同一列, 任意两个皇后不能成 45 度或 135 , 统计所有皇后能存放的位置和总数

 PS:这篇文章想法思路简单,代码量长,适合初学者学习,能更好的的理解这个问题 

先定义计数器

int count=o//计数器

我们先摆放第一个皇后,再摆放第二个皇后的时候需要考虑
皇后与皇后不会再同一行上,不会在直角线上(成45°或135°)(定义的一维数组已经保证每一行只会有一个皇后)。所以我们在每摆放一个新的皇后时都要与前面的皇后进行if语句的判断

for (int q1 = 0; q1 < 8; q1++)  //第一个皇后
	{
		for (int q2 = 0; q2 < 8; q2++) //第二个皇后
		{
			if (q1 == q2 || q1 == q2 + 1 || q1 == q2 - 1) //不在同一列,不成对角线
			{
				continue;
			}
        }
   }

 同理继续判断,完整代码如下

int main()
{
	int count = 0;//计数器
	for (int q1 = 0; q1 < 8; q1++)
	{
		
		for (int q2 = 0; q2 < 8; q2++)
		{
			if (q1 == q2 || q1 == q2 + 1 || q1 == q2 - 1)
			{
				continue;
			}
			for (int q3 = 0; q3 < 8; q3++)
			{
				if (q1 == q3 || q1 == q3 + 2 || q1 == q3 - 2
					|| q2 == q3 || q2 == q3 + 1 || q2 == q3 - 1)
				{
					continue;
				}
				for (int q4 = 0; q4 < 8; q4++)
				{
					if (q1 == q4 || q1 == q4 + 3 || q1 == q4 - 3
						|| q2 == q4 || q2 == q4 + 2 || q2 == q4 - 2
						|| q3 == q4 || q3 == q4 + 1 || q3 == q4 - 1)
					{
						continue;
					}
					for (int q5 = 0; q5 < 8; q5++)
					{
						if (q1 == q5 || q1 == q5 + 4 || q1 == q5 - 4
							|| q2 == q5 || q2 == q5 + 3 || q2 == q5 - 3
							|| q3 == q5 || q3 == q5 + 2 || q3 == q5 - 2
							|| q4 == q5 || q4 == q5 + 1 || q4 == q5 - 1)
						{
							continue;
						}
						for (int q6 = 0; q6 < 8; q6++)
						{
							if (q1 == q6 || q1 == q6 + 5 || q1 == q6 - 5
								|| q2 == q6 || q2 == q6 + 4 || q2 == q6 - 4
								|| q3 == q6 || q3 == q6 + 3 || q3 == q6 - 3
								|| q4 == q6 || q4 == q6 + 2 || q4 == q6 - 2
								|| q5 == q6 || q5 == q6 + 1 || q5 == q6 - 1)
							{
								continue;
							}
							for (int q7 = 0; q7 < 8; q7++)
							{
								if (q1 == q7 || q1 == q7 + 6 || q1 == q7 - 6
									|| q2 == q7 || q2 == q7 + 5 || q2 == q7 - 5
									|| q3 == q7 || q3 == q7 + 4 || q3 == q7 - 4
									|| q4 == q7 || q4 == q7 + 3 || q4 == q7 - 3
									|| q5 == q7 || q5 == q7 + 2 || q5 == q7 - 2
									|| q6 == q7 || q6 == q7 + 1 || q6 == q7 - 1)
								{
									continue;
								}
								for (int q8 = 0; q8 < 8; q8++)
								{
									if (q1 == q8 || q1 == q8 + 7 || q1 == q8 - 7
										|| q2 == q8 || q2 == q8 + 6 || q2 == q8 - 6
										|| q3 == q8 || q3 == q8 + 5 || q3 == q8 - 5
										|| q4 == q8 || q4 == q8 + 4 || q4 == q8 - 4
										|| q5 == q8 || q5 == q8 + 3 || q5 == q8 - 3
										|| q6 == q8 || q6 == q8 + 2 || q6 == q8 - 2
										|| q7 == q8 || q7 == q8 + 1 || q7 == q8 - 1)
									{
										continue;
									}
									count++;
									printf("%d,%d,%d,%d,%d,%d,%d,%d\n", q1, q2, q3, q4, q5, q6, q7, q8);
								}
							}
						}
					}
				}
			}
		}
	}
	printf("一共有%d种方法", count);
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值