抽象DFS:2N皇后

简介: 抽象DFS:2N皇后

建议在看此问题之前,先弄懂n皇后问题


问题描述


 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。


 


输入格式


 输入的第一行为一个整数n,表示棋盘的大小。


 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。


 输出格式


 输出一个整数,表示总共有多少种放法。


 样例输入


4


1 1 1 1


1 1 1 1


1 1 1 1


1 1 1 1


样例输出


2


样例输入


4


1 0 1 1


1 1 1 1


1 1 1 1


1 1 1 1


样例输出


0

#include <iostream>
using namespace std;
int n;
int a[10][10];
int y[10],d1[20],d2[10];
int number;
void dfs(int x,int z){    //z表示黑白皇后。1黑,2白 
  if(x==n && z==2){      //放到最后一行,并且白皇后放完结束 
    number++;
    return;
  }
  if(x==n){
    dfs(0,z+1);       //放完黑皇后,在放白皇后 
    return; 
  } 
  for(int i=0;i<n;i++){   //每一行的每一列 
    if(a[x][i] && y[i]!=3 && y[i]!=z && d1[x+i]!=3 && d1[x+i]!=z && d2[x-i+n]!=3 && d2[x-i+n]!=z){
      a[x][i]=0;
      y[i]+=z;
      d1[x+i]+=z;
      d2[x-i+n]+=z;
      dfs(x+1,z);
      y[i]-=z;
      d1[x+i]-=z;
      d2[x-i+n]-=z; 
      a[x][i]=1;
    } 
  } 
}
int main(){
  cin>>n;
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cin>>a[i][j];
    }
  }
  dfs(0,1);          //从第0行开始放 
  cout<<number;
  return 0;
} 

z=1时正在放黑皇后,z=2时正在放白皇后,

所以y[i]=0时黑白皇后都可放,z=1时不可放黑皇后,z=2时不可放白皇后,z=3时黑白皇后都不可放。换句话说只要不等于3并且不等于本身z就可以放当前要放的皇后种类。

相关文章
|
4月前
|
算法
Hierholzer算法dfs找欧拉回路模板
Hierholzer算法dfs找欧拉回路模板
59 0
|
6天前
|
存储 算法 Java
【DFS(深度优先搜索)详解】看这一篇就够啦
本文介绍了深度优先搜索(DFS)算法及其应用。DFS从某个顶点出发,深入探索图的每条路径,直到无法前进为止,然后回溯。文章详细解释了DFS的基本思想,并通过示例图展示了其执行过程。此外,文中还探讨了三种枚举方式:指数型枚举、排列型枚举和组合型枚举,并提供了具体的代码实现。最后,文章通过几道练习题帮助读者更好地理解和应用DFS算法。
58 19
【DFS(深度优先搜索)详解】看这一篇就够啦
|
存储 算法
深度优先遍历(DFS):探索图的奥秘
当进行深度优先遍历(DFS)时,我们需要按照一定的步骤来遍历图中的节点。 选择起始节点:选择图中的一个起始节点作为遍历的起点。 标记已访问:将起始节点标记为已访问,并将其放入数据结构中,比如栈或递归调用。 探索相邻节点:从起始节点开始,探索与其相邻的节点。这是通过查找邻接表来实现的,邻接表存储了每个节点的相邻节点信息。 深入探索:选择一个相邻节点,标记为已访问,并将其放入数据结构中。然后,从这个相邻节点出发,继续探索其相邻节点,形成一个深入的路径。这一步是递归的核心。 回溯:当没有未访问的相邻节点时,回溯到上一个节点,继续探索其他未访问的相邻节点。这可以通过从数据结构中弹出节点来实现,或者从递
262 0
|
机器学习/深度学习 存储 算法
【DFS经典例题】2n皇后问题
【DFS经典例题】2n皇后问题
70 0
|
4月前
|
算法
深度优先搜索(DFS)的基础理解与实现
深度优先搜索(DFS)的基础理解与实现
48 0
|
机器学习/深度学习
抽象DFS:N皇后问题
抽象DFS:N皇后问题