N后问题
-
问题描述:
在nxn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线 上的棋子。n后问题等价于,在nxn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。 -
源代码:
#include<iostream>
#include<vector>
using namespace std;
const int N = 8;
int g_count = 0;
bool check_data(vector<int> &data, int index) {
if (index == 0)
return true;
for (int i = 0; i < index; i++) {
if (data[index] == data[i])
return false;
if (data[index] == data[i] - (index - i))
return false;
if (data[index] == data[i] + (index - i))
return false;
}
return check_data(data, index - 1);
}
void init_data(vector<int> &data, int index) {
if (index == N) {
if (check_data(data, N - 1)){
g_count++;
for (int i = 0; i < data.size(); i++)
cout << data[i] << " ";
cout << endl;
}
return;
}
if (index > 1) {
if (!check_data(data, index - 1))
return;
}
for (int i = 1; i < N + 1; i++) {
data[index] = i;
init_data(data, index + 1);
}
}
int main( ) {
vector<int> data(N);
init_data(data, 0);
cout << g_count << endl;
getchar();
return 0;
}
3.运行结果: