解答代码
#include<iostream>#include<string>#include<cstdio>#include<cmath>#define maxSize 128int blackFlag[maxSize];int whiteFlag[maxSize];int chessBoard[maxSize][maxSize];int counter=0;int n;using namespace std;int blackQueend(int pos);int whiteQueen(int pos);int blackQueen(int pos){ int i,j; for(i=0;i<pos-1;i++) { if(blackFlag[i]==blackFlag[pos-1] || fabs(pos-1-i)==fabs(blackFlag[i]-blackFlag[pos-1])) return 0; } if(pos==n) { counter++; return 0; } for(j=0;j<n;j++) { if(j!=whiteFlag[pos] && chessBoard[pos][j]==1) { blackFlag[pos]=j; blackQueen(pos+1); } }}int whiteQueen(int pos){ int i,j; for(i=0;i<pos-1;i++) { if(whiteFlag[i]==whiteFlag[pos-1] || fabs(pos-1-i)==fabs(whiteFlag[i]-whiteFlag[pos-1])) return 0; } if(pos==n) { blackQueen(0); return 0; } for(j=0;j<n;j++) { if(chessBoard[pos][j]==1) { whiteFlag[pos]=j; whiteQueen(pos+1); } }}int main(){ //freopen("input2.txt","r",stdin); int i,j; cin>>n; //cout<<n<<endl; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>chessBoard[i][j]; whiteQueen(0); cout<<counter<<endl; return 0;}
新闻热点
疑难解答