八皇后问题

Description

相信大家都听过经典的"八皇后"问题吧?这个游戏要求在一个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击( 攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。桐桐对这个游戏很感兴趣,现在他想知道每种合法 的摆放方案.

Format

Input

Output

输出若干行,每行一个种方案,也就是8个数字,中间不要用空格分开

Samples

【输入样例】

输入数据 1


输出数据 1


【输出样例】

Limitation

1s, 1024KiB for each test case.

CODE:

#include<bits/stdc++.h>
using namespace std;
int main() {
	for(int i1=1; i1<=8; i1++) {
		for(int i2=1; i2<=8; i2++) {
			for(int i3=1; i3<=8; i3++) {
				for(int i4=1; i4<=8; i4++) {
					for(int i5=1; i5<=8; i5++) {
						for(int i6=1; i6<=8; i6++) {
							for(int i7=1; i7<=8; i7++) {
								for(int i8=1; i8<=8; i8++) {
									if(i1!=i2&&i1!=i3&&i1!=i4&&i1!=i5&&i1!=i6&&i1!=i7&&i1!=i8&&abs(i1-i2)!=1&&abs(i1-i3)!=2&&abs(i1-i4)!=3&&abs(i1-i5)!=4&&abs(i1-i6)!=5&&abs(i1-i7)!=6&&abs(i1-i8)!=7)
										if(i2!=i3&&i2!=i4&&i2!=i5&&i2!=i6&&i2!=i7&&i2!=i8&&abs(i2-i3)!=1&&abs(i2-i4)!=2&&abs(i2-i5)!=3&&abs(i2-i6)!=4&&abs(i2-i7)!=5&&abs(i2-i8)!=6)
											if(i3!=i4&&i3!=i5&&i3!=i6&&i3!=i7&&i3!=i8&&abs(i3-i4)!=1&&abs(i3-i5)!=2&&abs(i3-i6)!=3&&abs(i3-i7)!=4&&abs(i3-i8)!=5)
												if(i4!=i5&&i4!=i6&&i4!=i7&&i4!=i8&&abs(i4-i5)!=1&&abs(i4-i6)!=2&&abs(i4-i7)!=3&&abs(i4-i8)!=4)
													if(i5!=i6&&i5!=i7&&i5!=i8&&abs(i5-i6)!=1&&abs(i5-i7)!=2&&abs(i5-i8)!=3)
														if(i6!=i7&&i6!=i8&&abs(i6-i7)!=1&&abs(i6-i8)!=2)
															if(i7!=i8&&abs(i7-i8)!=1)
																cout<<i1<<i2<<i3<<i4<<i5<<i6<<i7<<i8<<endl;
								}
							}
						}
					}
				}
			}
		}
	}
	return 0;
}
//暴力枚举

#include <bits/stdc++.h>
using namespace std;
int a[107];
bool s[107],d[107],f[107];
void dfs(int ans)
{
	if(ans==9)
	{
		for(int i=1;i<=8;i++)cout<<a[i];
		cout<<endl;
		return ;
	}
	for(int i=1;i<=8;i++)
	{
		if(s[i]==0&&d[i-ans+10]==0&&f[i+ans]==0)
		{
			a[ans]=i;
			s[i]=1;
			d[i-ans+10]=1;
			f[i+ans]=1;
			dfs(ans+1);
			s[i]=0;
			d[i-ans+10]=0;
			f[i+ans]=0;
		}
	}
}
int main()
{
	dfs(1);
	return 0;
}
//递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值