DFS黑白皇后问题

 

 

#include<iostream>
using namespace std;
int map[15][15];
int c[15],v1[15],v2[15];
int n,cnt;
void dfs(int x,int p){
    if(x==n && p==2){
        cnt++;
        return;
    }if(x==n){
        dfs(0,p+1);
        return;
    }
    for(int i=0;i<n;i++){
        if(map[x][i] && c[i]!=3 && c[i]!=p && v1[x+i]!=3 && v1[x+i]!=p && v2[x-i+n]!=3 && v2[x-i+n]!=p){
            map[x][i]=0;
            c[i]+=p;
            v1[x+i]+=p;
            v2[x-i+n]+=p;
            dfs(x+1,p);
            c[i]-=p;
            v1[x+i]-=p;
            v2[x-i+n]-=p;
            map[x][i]=1;
            
        }
    }
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>map[i][j];
        }
    }
    dfs(0,1);
    cout<<cnt<<endl;
    return 0;
}

 

 按每行去搜,这里有一个处理思想就是用0,1,2,3去表示可否放皇后,黑用1,白用2,都可以用3相较于之前的DFS问题中用bool VIS数组表示能否放

 

posted on 2020-03-18 16:29  二进制dd  阅读(180)  评论(0编辑  收藏  举报

导航