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数组表示能否放