【codevs 2194】N皇后
来源:互联网 发布:淘宝国棉一厂 编辑:程序博客网 时间:2024/06/06 03:59
题目描述 Description
检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。
列号
1 2 3 4 5 6
————————-
1 | | O | | | | |
————————-
2 | | | | O | | |
————————-
3 | | | | | | O |
————————-
4 | O | | | | | |
————————-
5 | | | O | | | |
————————-
6 | | | | | O | |
————————-
上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是跳棋放置的一个解。请编一个程序找出所有跳棋放置的解。并把它们以上面的序列方法输出。解按字典顺序排列。请输出前3个解。最后一行是解的总个数。
输入描述 Input Description
一个数字N表示棋盘是N x N大小的。
输出描述 Output Description
前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。
样例输入 Sample Input
6
样例输出 Sample Output
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
数据范围及提示 Data Size & Hint
6 <= N <= 13
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=500+5;int a[maxn];bool b[maxn],c[maxn],d[maxn];int n,sum;void dfs(int i){ for(int j=1;j<=n;j++) { if(b[j]==0&&c[i+j]==0&&d[i-j+n]==0) { a[i]=j;//第i行的第j列放个皇后 b[j]=1;//行 c[i+j]=1;//对角线 d[i-j+n]=1;//对角线 if(i==n) { sum++; if(sum<=3) { for(int i=1;i<=n;i++) printf("%d ",a[i]); puts(""); } } else dfs(i+1); b[j]=0; c[i+j]=0; d[i-j+n]=0; } }}int main(){ scanf("%d",&n); dfs(1); cout<<sum<<'\n'; return 0;}
阅读全文
0 0
- 【codevs 2194】N皇后
- 【CodeVS】1295 N皇后
- 【codevs】p1295 n皇后问题
- Codevs P1295 N皇后问题
- CODEVS 1295N皇后问题
- codevs天梯N皇后 dfs
- Codevs 1295 N皇后问题
- 【codevs 1295】N皇后问题
- codevs N皇后问题 回溯法
- DFS练习-codevs-1295N皇后问题
- CODEVS 1295 N皇后问题 (DFS)
- CodeVS 1295 N皇后问题 题解
- 20160322 CodeVS 1295 N皇后问题,1958 刺激,3113 二叉树计数2
- 【题解】 状态压缩 CSYZOJ 1040 || codevs 1295 || hdu 2553 N皇后问题
- n皇后
- N皇后
- N 皇后
- n皇后
- 2017.10.28闵神讲课DAY1
- 集成算法与泰坦尼克
- VC++6.0完美支持xp,win7,win8,win10
- Apache POI HSSF读写Excel总结
- <Qt>实例:视频播放器
- 【codevs 2194】N皇后
- C++实现反距离插值
- 聊聊netstat命令
- 51nod-17-10-29
- spark streaming从指定offset处消费Kafka数据
- pip install 报错 SyntaxError:invalid syntax
- 费马小定理及MR素数判断
- 51nod 1447 好记的字符串 状压dp
- 第三章 求1!+1/2!+1/3!+1/4!+....的前20项和