HDU 2553.N皇后问题

来源:互联网 发布:python取代js 编辑:程序博客网 时间:2024/06/06 22:02

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553

AC代码(C++):

#include <iostream>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;int n;int queen[15];bool vis[15];int ans[15];void dfs(int r) {    if (r == n + 1) {        ans[n]++;        return;    }    bool flag;    int i, j;    for (i = 1; i <= n; i++) {        if (vis[i])continue;        flag = false;        for (j = r - 1; j >= 1; j--) {            if (i - queen[j] == r - j || i - queen[j] == j - r) {                flag = true;                break;            }        }        if (flag)continue;        queen[r] = i;        vis[i] = true;        dfs(r + 1);        vis[i] = false;        queen[r] = 0;    }}int main() {    memset(ans, 0, sizeof(ans));    for (n = 1; n <= 10; n++) {        memset(vis, false, sizeof(vis));        dfs(1);    }    while (cin >> n) {        if (n == 0)break;        cout << ans[n] << endl;    }    //system("pause");}
总结: 水题. 很坑爹的是, 必须提前打表, 否则测试样例会多次测试导致超时.

原创粉丝点击