博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2754:八皇后 OpenJ_Bailian - 2754 ( 搜索 DFS )
阅读量:4046 次
发布时间:2019-05-25

本文共 1339 字,大约阅读时间需要 4 分钟。

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 

对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b 1b 2...b 8,其中b i为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。 

Input

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)

Output

输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。

Sample Input

2
1
92                                                                                                                                                                                                                                                                                             

Sample Output

15863724
84136275                                                                                                                                                                                                

题意:

即找出所有的八皇后放置的可能,然后按照从小到大的顺序找出第b个八皇后序列。

八皇后解题:

代码:

#include
#include
#include
#include
#define N 100using namespace std;int a[N][N],b[N];int vis[N];int s; int check(int step){ //如果两列上皇后的行的差=列的差 或者 两列上皇后的行相同,说明放的位置错误 for(int i=1;i<=step-1;i++) if((abs(b[i]-b[step])==abs(i-step))) return 0; return 1;}void dfs(int step) //搜索每一行{ if(step==8+1) { s++; for(int i=1; i<=8; i++) a[s][i]=b[i]; return; } for(int i=1; i<=8; i++) //遍历step行上的每一列 { if(vis[i]==0) //说明step行的i列未放皇后 { b[step]=i; if(check(step)) { vis[i]=1; dfs(step+1); vis[i]=0; } } }} int main(){ dfs(1); int t,x; scanf("%d",&t); while(t--){ scanf("%d",&x); for(int j=1; j<=8; j++) { printf("%d",a[x][j]); } cout<

 

转载地址:http://zvzci.baihongyu.com/

你可能感兴趣的文章
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>