0
0
已采纳
许金夫
初级天翼
初级天翼
这是一个搜索题,你确定要做?
4048 八皇后经验值:1200
题目描述 Description
在国际象棋中,有这样一个棋,叫做皇后。皇后可以吃同一行,同一列,以及同一对角线上的任意棋子(包括主对角线和副对角线)。现在有一个8*8的棋盘,你要在棋盘上摆八个皇后,使得任意两个皇后之间都不能互相吃掉对方,请你列出前五项方案(按照字典序排列)以及方案总数?
输入描述 Input Description
无
输出描述 Output Description
输出6行,前5行每行8个数字,每个数字分别表示皇后从第一行到第八行所对应的列数,每个数字用空格隔开。第6行输出方案总数
样例输入 Sample Input
样例输出 Sample Output
提示:方案总数有92种
----------------------分界线--------------------
方案一:首先需要一个数组来存这些棋子,至少需要8*8;
然后使用DFS函数,往里面填棋子,如果出现冲突(同一竖线、横线和斜边)就回溯,最后输出
方法二:
打表:
需要五行输出和一行方案总数(总数已有=92)
输出:
1 5 8 6 3 7 2 4
...............
...............
...............
...............
92
打字不易~
0
0
0
0
徐睿涵
初级守护
初级守护
深搜!
核心代码
- 定义f函数输出
- 定义dfs函数{
- 判断是否符合条件,累加并输出前五行
- for(int j=1;j<=8;j++)
- if(!b[j] && !c[i-j+8] && !d[i+j]){
- a[i]=j;
- b[j]=1;
- c[i-j+8]=1;
- d[i+j]=1;
- dfs(i+1);
- b[j]=0;
- c[i-j+8]=0;
- d[i+j]=0;
- if(!b[j] && !c[i-j+8] && !d[i+j]){
- }
主程序
0