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;
}
//递归