八皇后原始版本
内存限制: 512 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
在国际象棋棋盘上(8 * 8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且按字典序从小到大指出各种不同的放法。
输入格式
无。
输出格式
见样例。
样例
样例输入
无
样例输出
1 5 8 6 3 7 2 4
1 6 8 3 7 4 2 5
......
92
数据范围与提示
无。
#include <bits/stdc++.h>
using namespace std;
int n, sum;
int a[20];
bool flag1[10], flag2[20], flag3[20];
void f(int x) {
if(x == 9) {
for(int i = 1; i <= 8; i++) {
printf("%d ", a[i]);
}
printf("\n");
sum++;
return;
}
for(int i = 1; i <= 8; i++) {
if(flag1[i] == true || flag2[x - i + 7] == true || flag3[x + i] == true) {
continue;
}
flag1[i] = true, flag2[x - i + 7] = true, flag3[x + i] = true;
a[x] = i;
f(x + 1);
flag1[i] = false, flag2[x - i + 7] = false, flag3[x + i] = false;
}
}
int main() {
f(1);
printf("%d", sum);
return 0;
}