HDU 2553 N皇后问题
2017-07-03 12:34
162 查看
N皇后问题
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
分析:题目意思就是在某一行的某一列放置一个皇后,然后在他的同一行,同一列以及45°对角线都不能放置皇后,求存在多少种放置方案。所以的话,我的思路就是用从第一行开始遍历,用一个数组id[i]表示第i行的皇后放置在哪一列。由于我是按行遍历的,因此在考虑当前行当前列是否可以放置的时候,只需要考虑是否同一列或者在45°对角线上,同一列的问题,可以考虑cur行之前的放置情况,用id[cur]与id[i]来判断,cur表示当前行;对角线的问题,很容易可以发现,判断它们斜率的绝对值是否等于1(紫书上也有一种判断方法,菜鸟没看懂,只能用自己的方法来判断),如果可以放置,则进行cur+1行的操作,直到n-1行,否则考虑另一列。判断一套方案是否成立的条件是cur==n。下面代码用了预处理的方法~
下面上代码:
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
分析:题目意思就是在某一行的某一列放置一个皇后,然后在他的同一行,同一列以及45°对角线都不能放置皇后,求存在多少种放置方案。所以的话,我的思路就是用从第一行开始遍历,用一个数组id[i]表示第i行的皇后放置在哪一列。由于我是按行遍历的,因此在考虑当前行当前列是否可以放置的时候,只需要考虑是否同一列或者在45°对角线上,同一列的问题,可以考虑cur行之前的放置情况,用id[cur]与id[i]来判断,cur表示当前行;对角线的问题,很容易可以发现,判断它们斜率的绝对值是否等于1(紫书上也有一种判断方法,菜鸟没看懂,只能用自己的方法来判断),如果可以放置,则进行cur+1行的操作,直到n-1行,否则考虑另一列。判断一套方案是否成立的条件是cur==n。下面代码用了预处理的方法~
下面上代码:
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int id[12]; int n; int count1; int a[12]; void dfs(int cur,int t) { if(cur==t) { a[t]++; } else { for(int i=0;i<t;i++) { id[cur]=i; int flag=1; for(int j=0;j<cur;j++) { if(id[cur]==id[j]||abs(cur-j)==abs(id[cur]-id[j])) { flag=0; break; } } if(flag==1) dfs(cur+1,t); } } } int main() { memset(a,0,sizeof(a)); for(int i=1;i<=10;i++) { dfs(0,i); } while(~scanf("%d",&n)&&n) { printf("%d\n",a ); } return 0; }
相关文章推荐
- HDU 2553 N皇后问题
- HDU 2553 N皇后问题(深搜)
- HDU 2553 N皇后问题(DFS+打表)
- HDU 2553 N皇后问题 深搜
- HDOJ/HDU 2553 N皇后问题 回溯加递归
- hdu 2553 N皇后问题
- HDU 2553 N皇后问题 深搜-dfs
- 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皇后问题----搜索 dfs 回溯法 预处理
- [HDU] 2553 N皇后问题-简单深搜
- HDU_2553——n皇后问题,作弊
- hdu 2553 N皇后问题<java>