题目描述
经典的八皇后问题,在一个8*8的棋盘上放置8个皇后,使得不能互相攻击到,皇后的攻击范围的同一行,同一列以及同一个斜线。要求输出所有不会互相攻击到的摆放方式,所有通过旋转,对称都方式得到的摆放方式均认为是不同的摆放方式。棋盘被编号为0-7行,0-7列。
输入
无输入。
输出
每行一个数字代表摆放方式,如01234567代表从第0行放在0列,第1行放在1列,
第2行放在2列,按照升序输出。
样例输入
无
样例输出
04752613
05726314
06357142
06471352
…
只给出部分输出…都给了可以直接拷贝了…
代码:
#include<bits/stdc++.h>
using namespace std;
const int m = 8;
const int n = 20;
deque<int> q;
bool a[m], b[n], c[n];//列,\对角线,/对角线
void DFS(int start, int end) {
if (start == end)
return;
for (int j = 0; j < end; j++) {
if (a[j] && b[start + j + 1] && c[j - start + 7]) {
q.push_back(j);
if (start + 1 == end) {
for (auto it = q.begin(); it != q.end(); ++it)
cout << *it;
cout << endl;
}
a[j] = b[start + j + 1] = c[j - start + 7] = false;
DFS(start + 1, end);
a[j] = b[start + j + 1] = c[j - start + 7] = true;
q.pop_back();
}
}
}
int main() {
fill(a, a + m, true);
fill(b, b + n, true);
fill(c, c + n, true);
DFS(0, m);
return 0;
}