N皇后问题(hdu2553,dfs+打表)
来源:互联网 发布:大数据营销 市场规模 编辑:程序博客网 时间:2024/05/20 19:50
http://acm.hdu.edu.cn/showproblem.php?pid=2553
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5706 Accepted Submission(s): 2580
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
2008 HZNU Programming Contest
Recommend
lcy
思路:
回溯+打表;
0MS 228K 605 B C++
*/
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int vis[3][30]; int c[15],n,tot,a[15]; void dfs(int cur) { if(cur==n)tot++; else for(int i=0;i<n;i++) { if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n]) { c[cur]=i; vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1; dfs(cur+1); vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0; } } } int main() { for(n=1;n<=10;n++) {memset(vis,0,sizeof(vis));tot=0;dfs(0);a[n]=tot; } while(scanf("%d",&n)!=EOF&&n!=0) { printf("%d\n",a[n]); } return 0; }
- N皇后问题(hdu2553,dfs+打表)
- HDU2553 N皇后问题(回溯+打表)
- HDU2553:N皇后问题(DFS)
- dfs HDU2553 N皇后问题
- DFS hdu2553 N皇后问题
- hdu2553 N皇后问题--DFS
- hdu2553-N皇后问题 DFS
- HDU2553-N皇后问题(DFS)
- hdu2553 N皇后问题(回溯dfs)
- hdu2553:N皇后问题(dfs)
- hdu2553(八皇后问题+打表)
- hdu2553 N皇后问题
- HDU2553 N皇后问题
- HDU2553:N皇后问题
- hdu2553 n皇后问题
- hdu2553 N皇后问题
- hdu2553 n皇后问题
- HDU2553 N皇后问题
- 专注做好一件事
- 异步通知fasync
- c++ Queue的实现
- OpenStack Swift client开发
- firefly框架分析之netconnect package(一)
- N皇后问题(hdu2553,dfs+打表)
- DataGridView显示数据
- Python 输出货币格式数据
- C/C++一些易混淆的知识点
- hdu 1564 博弈
- 对 Linux 专家非常有用的 20 个命令
- 软件开发人员的内功修炼之道
- javah生成头文件问题
- C/C++调用matlab程序