hdu 2553N皇后问题
来源:互联网 发布:脐带血公司 知乎 编辑:程序博客网 时间:2024/06/05 13:20
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7612 Accepted Submission(s): 3429
Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1850
Sample Output
19210
Author
cgf
Source
2008 HZNU Programming Contest
和poj1321差不多,就是多了个对角线,但却因为这个搞了一个下午,最后还是看了书才弄懂,而且好不容易搞出来了居然还超时,妈蛋,让老夫情何以堪。。。
最好打表,不然。。。
#include<algorithm>#include<iostream>#include<cstdio>#include<cstring>using namespace std;bool vis[3][50];int n , cnt , sum[15];void dfs(int cur){ if (cur == n) { cnt++; return; } for (int i = 0; i < n; ++i) { if (!vis[0][i] && !vis[1][cur + i] && !vis[2][cur - i + n])///分别是判断列,副对角线,主对角线会不会冲突。 { 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(){ memset(sum , 0, sizeof(sum)); for(int i=0; i<=10; ++i) { memset(vis, 0, sizeof(vis)); cnt = 0; n = i; dfs(0); sum[i] = cnt; ///printf("cnt = %d\n", cnt); } while (scanf("%d", &n) != EOF) { if(n == 0) break; printf("%d\n", sum[n]); } return 0;}
0 0
- HDU 2553 N皇后问题
- HDU 2553 N皇后问题
- HDU 2553-N皇后问题
- hdu 2553 N皇后问题
- HDU-2553-N皇后问题
- Hdu 2553 N皇后问题
- hdu 2553 N皇后问题
- hdu 2553 N皇后问题
- HDU 2553 N皇后问题
- HDU--2553 -- N皇后问题
- hdu-2553--N皇后问题
- 2553--Hdu--N皇后问题
- N皇后问题 hdu 2553
- HDU 2553 N皇后问题
- hdu 2553 n皇后问题
- HDU 2553 N皇后问题
- hdu-2553-N皇后问题
- HDU-2553-N皇后问题
- oracle中基本的分组函数
- ubuntu linux下执行.sh文件
- 博客迁移声明
- linux 执行php脚本
- cf244D. Match & Catch 字符串hash (模板)或 后缀数组。。。
- hdu 2553N皇后问题
- Maven核心概念的理解
- linux内核驱动开发--编译外部模块
- java1.5 新特性 自动装箱和拆箱
- 【驱动之二】IO_STACK_LOCATION总结
- POJ3101 大数+LCM
- JS 删除字符串最后一个字符的几种方法
- 存储器的重映射
- C#中用接口实现鸭子案例