`

HDU 2553 N皇后问题 .

阅读更多

N皇后问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1753    Accepted Submission(s): 769

Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

 

 

Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
 

 

Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
 

 

Sample Input
1 8 5 0
 

 

Sample Output
1 92 10
 

 

Author
cgf
 

 

Source
 

 

Recommend
lcy
 
经典问题,不过注意预处理之后先上交,唔系会超时{=       =}
贴代码得意:
4286478 2011-07-29 14:21:12 Accepted 2553 31MS 240K 1060 B C++ 10SGetEternal{(。)(。)}!
#include <iostream>
using namespace std;
#define MAXI 11

int maz[MAXI][MAXI];

void mark(int n, int x, int y, int add)
{
    int i, f = 1;
    
    for (i = 0;f ; i++)
    {
        f = 0;
        if (x - i >= 0 || y - i >= 0 ||  x + i < n || y + i < n) 
        {
            f = 1;
            if (x + i < n) maz[x + i][y] += add;
            if (y + i < n) maz[x][y + i] += add;
            if (x - i >= 0) maz[x - i][y] += add;
            if (y - i >= 0) maz[x][y - i] += add;
            if (x + i < n && y + i < n) maz[x + i][y + i] += add;
            if (x + i < n && y - i >= 0) maz[x + i][y - i] += add;
            if (x - i >= 0 && y + i < n) maz[x - i][y + i] += add;
            if (x - i >= 0 && y - i >= 0) maz[x - i][y - i] += add;
        }
    }
}

int DFS(int x, int n)
{
    int y, tsu = 0;

    if (x == n) return 1;
    for (y = 0; y < n; y++)
        if (!maz[x][y])
        {
            mark(n, x, y, 1);
            tsu += DFS(x + 1, n);
            mark(n, x, y, -1);
        }

    return tsu;
}

int main()
{
    int n, i, step[MAXI];

    for (i = 0; i < MAXI; i++)
        step[i] = DFS(0, i);

    while (scanf("%d", &n), n) printf("%d\n", step[n]);

    return 0;
}

 水题也……

分享到:
评论

相关推荐

    HDU-2000-2099.rar_hdu

    8. **回溯与分支限界**:2301-2350号题目可能涉及这些问题,如八皇后问题、N皇后问题、排列组合等。 9. **模拟与建模**:2351-2400号题目可能需要对实际问题进行抽象,通过编写程序模拟现实世界中的过程。 10. **...

    HDU-2000-2099.zip_hdu2000

    5. **回溯法**:通过试探性的前进和撤销,寻找所有可能的解,如八皇后问题、N皇后问题、数独求解等。 6. **深度优先搜索和广度优先搜索**:在图或树中进行遍历,如拓扑排序、强连通分量、最小生成树等。 7. **数学...

    hdu acm 教案(7)

    例如,八皇后问题、N皇后问题等,都需要通过搜索所有可能的状态来找到解决方案。 4. **剪枝**:在搜索过程中,剪枝是一种优化策略,用于提前终止那些肯定不会导致解的子树的搜索。这可以显著减少搜索空间,提高效率...

    HDU算法讲解的PPT

    6. **递归与回溯**:递归是解决许多问题的有效手段,而回溯则是解决组合优化问题的经典策略,如八皇后问题、N皇后问题、数独求解等。 7. **分治与贪心策略**:这两种思想是设计算法的重要指导原则,分治将大问题...

    HDU ACM 部分题原代码

    7. **递归与回溯**:许多问题可以通过递归和回溯的方式求解,例如八皇后问题、N皇后问题、迷宫问题等。 8. **贪心策略**:有些问题可以通过局部最优决策达到全局最优,贪心算法在这种情况下非常有效。 9. **模拟法...

    搜索算法讲座资料~~~~~

    n皇后问题位运算版.mht Search in a Graph.mht STL in Searching.mht USACO搜索策略.mht 递归分治课件 - from tju.ppt 浅谈部分搜索+高效算法在搜索问题中的应用.doc 深度优先搜索-bylove8909.doc 搜索基础.pdf 搜索...

    杭电1051到1098 acm解题报告

    - 1086——1.cpp: 可能是关于回溯法的题目,用于解决如八皇后问题、N皇后问题、数独等。 4. **树与图的深度优先搜索(DFS)与广度优先搜索(BFS)** - 1088.cpp: 可能需要使用DFS或BFS来遍历树或图,解决树的...

    HDOJ2051-2099 acm的AC解题报告

    8. **回溯法**:对于一些组合优化问题,如八皇后问题、N皇后问题、括号生成等,可能会用到回溯法来穷举所有可能的解。 9. **分治法**:对于复杂问题,分治法是一种有效的策略,如快速排序、归并排序、大数乘法等。 ...

    杭电acm PPT合集

    10. **回溯法**:用于解决约束满足问题,如八皇后问题、N皇后问题等。 11. **模拟法**:根据题目描述直接模拟过程,求得结果。 12. **编程语言基础**:C++、Java、Python等编程语言的基础语法、效率分析和优化技巧...

    hduoj poj 的题目分类

    7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理过程模拟等。 9. **位运算**:利用位运算快速解决一些问题,如奇偶性判断、数组操作等。 通过这两个平台的...

    博弈的经典题集

    递归和回溯也是解决博弈问题的重要方法,特别是在解决棋类问题时,如八皇后问题或N皇后问题。 文件名"hdu"和"Pku"可能是指来自两个著名的在线判题系统——HDU(杭州电子科技大学在线评测系统)和PKU(北京大学在线...

    杭电acm题目解答

    这些算法常用于解决组合优化问题,如八皇后问题、N皇后问题等。 2048题可能涉及到数值计算、模拟或者组合博弈论。这些题目可能需要选手对数学模型有深入理解,并能用程序准确地模拟现实情况。 2049题和2050题可能...

    杭电算法18、19分析试卷.zip

    5. **搜索算法**:深度优先搜索(DFS)和广度优先搜索(BFS)是图和树问题中的常用方法,也可能涉及回溯法和剪枝策略,用于解决组合优化问题如八皇后问题、N皇后问题等。 6. **字符串处理**:如KMP算法、Boyer-...

    kuangbin的ACM模板

    - **应用场景**:N 皇后问题、Sudoku 游戏等。 ### 其他 #### 1. 高精度 - **概念**:在计算时,当数值过大或过小超出基本数据类型范围时使用的特殊计算方法。 - **实现方式**:通常使用数组来模拟大整数的存储,并...

    杭电ACM的11页部分题Java源代码

    5. **回溯法**:用于解决组合优化问题,如八皇后问题、N皇后问题等,通过不断尝试和撤销来寻找所有可能的解。 6. **模拟**:有些题目要求按照特定规则进行操作,这时可以通过编写程序来模拟这些规则。 7. **数学**...

Global site tag (gtag.js) - Google Analytics