问题标题: 酷町堂:4048 同学们,发挥才华的时间到了

0
0
已解决
王子逸
王子逸
新手天翼
新手天翼

我会选赞数最高方案最别致的采纳,60豆豆哦!截止时间5月12日

王子逸在2020-05-08 18:40:24追加了内容

打表数字谁能打一下


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;
  • }

主程序

0
我要回答