hdu 2553 N皇后问题(dfs)
2014-12-30 19:59
323 查看
Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
Sample Output
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1 8 5 0
Sample Output
1 92 10
#include <iostream> #include <stdio.h> using namespace std; int vis[3][21]; int ans; int dfs(int cur,int n) { if(cur==n) { ans++; return ans; } for (int i=0; i<n; i++) //在第cur行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]=true; //标记正副对角线以及列 dfs(cur+1,n); vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=false; } } return ans; } int main() { int a[12],n; for (int i=0; i<=11; i++) { ans=0; a[i]=dfs(0,i); } while (scanf("%d",&n) && n) { memset(vis, false, sizeof(vis)); printf("%d\n",a ); } return 0; }
相关文章推荐
- HDU 2553 N皇后问题 DFS
- hdu 2553 N皇后问题(DFS+回溯)
- HDU 2553 N皇后问题(还是DFS呀)
- HDU 2553 N皇后问题(dfs)
- HDU 2553 N皇后问题(DFS)
- HDU 2553 N皇后问题 深搜-dfs
- 【dfs+回溯】hdu 2553 N皇后问题
- hdu 2553 N皇后问题(dfs)
- HDU 2553 N皇后问题( DFS + 剪枝 )
- hdu 2553 N皇后问题 dfs回溯
- HDU 2553 N皇后问题 (搜索DFS)
- hdu 2553 N皇后问题----搜索 dfs 回溯法 预处理
- HDU 2553 N皇后问题 DFS 简单题
- HDU 2553 N皇后问题 (DFS+回溯)
- hdu 2553 N皇后问题 (经典DFS)
- HDU 2553 N皇后问题(深搜DFS)
- hdu 2553 N皇后问题(有点坑爹的深搜题dfs)
- HDU 2553--N皇后问题【DFS】
- HDU 2553 N皇后问题(DFS+打表)
- HDU 2553 N皇后问题 (回溯DFS)