问题标题: 酷町堂:4048 八皇后

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

在国际象棋中,有这样一个棋,叫做皇后。皇后可以吃同一行,同一列,以及同一对角线上的任意棋子(包括主对角线和副对角线)。现在有一个8*8的棋盘,你要在棋盘上摆八个皇后,使得任意两个皇后之间都不能互相吃掉对方,请你列出前五项方案(按照字典序排列)以及方案总数?

输入描述 Input Description

输出描述 Output Description

输出6行,前5行每行8个数字,每个数字分别表示皇后从第一行到第八行所对应的列数,每个数字用空格隔开。第6行输出方案总数

样例输入 Sample Input

样例输出 Sample Output

提示:方案总数有92种

到底该输出多少?大佬求解。。。


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

当然,这题有简便方法,但最好还是写搜索

提示:

void dfs(int pos){
    如果填完{
        cnt++;
        if(cnt<=5){
            输出方案;
            cout<<endl;
        }
        return ;
    } 
    for(每个位置){
        if(满足条件(可以填)){
            vis[i]=true;
            a[pos-i+7]=true;
            b[pos+i]=true;
            path[pos]=i;
            搜索下一个位置;
            vis[i]=false;
            a[pos-i+7]=false;
            b[pos+i]=false; 
        }
    }
    return ;
}

 

0
孔小川
孔小川
初级光能
初级光能

 

 

输出"1 5 8 6 3 7 2 4\n";

输出"1 6 8 3 7 4 2 5\n";

输出"1 7 4 6 8 2 5 3\n";

输出“1 7 5 8 2 4 6 3\n";

输出"2 4 6 8 3 1 7 5\n";

输出"92";

AC

我要回答