您的位置:首页 > 其它

HDU2553 N皇后问题

2012-08-29 09:21 267 查看
题意:有名的N皇后问题。输入N,求符合要求的N皇后排法有几个。

思路:看注释

#include<iostream>
#include<stack>
using namespace std;
#define MAXN 10 + 3

int list[MAXN];
int counts[MAXN];
int count = 0;
int n;

void search(int m) {
//m表示层数,一开始从0开始search(),程序会一直回朔到第n层
if (n == m) {
//因为遍历是从0开始的。这里也可以写成if (n - 1 == m - 1)
count ++;
return;
}
for (int i=0; i<n; i++) {
bool ok = true;
list[m] = i;
for (int j=0; j<m; j++) {
if (list[m] == list[j] || m + list[m] == j + list[j] || m - list[m] == j - list[j]) {
//对于第m层的每个可能的点i,与m层之前的m-1层进行比较,如果符合规则就search() m + 1 层
ok = false;
break;
}

}
if (ok) {
search(m + 1);
}
}

}

void init() {
for (int i=1 ;i<=10; i++) {
//打表
n = i;
count = 0;
search(0);
counts[i] = count;
}
}
int main() {
init();
while (cin>>n, n) {
//count = 0;
//search(0);
cout<<counts
<<endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: