題目描述
使用回溯法求解N後問題
輸入
皇后的個數
輸出
每一種方案及總方案數
樣例輸入
4
樣例輸出
0 1 0 0
0 0 0 2
3 0 0 0
0 0 4 0
0 0 1 0
2 0 0 0
0 0 0 3
0 4 0 0
總方案數爲:2
#include<iostream>
#include<stdlib.h>
using namespace std;
int count=0;
void dbf(int i,int n,int **arrx,int *a,int *b,int *c){
for(int j=0;j<n;j++){
if(!a[j]&&!b[i+j]&&!c[n+i-j]){
arrx[i][j]=i+1;
a[j]=1;
b[i+j]=1;
c[n+i-j]=1;
if(i==n-1){
for(int u=0;u<n;u++){
for(int d=0;d<n;d++){
cout<<arrx[u][d]<<" ";
}
cout<<endl;
}cout<<"----------------"<<endl;
count++;
}
else dbf(i+1,n,arrx,a,b,c);
arrx[i][j]=a[j]=b[i+j]=c[n+i-j]=0;
}
}
}
int main(){
int n;
while(cin>>n){
int **arrx=new int *[n];
for(int i=0;i<n;i++){
arrx[i]=new int [n];
}
int a[100],b[100],c[100];
for(int i=0;i<100;i++){
a[i]=b[i]=c[i]=0;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arrx[i][j]=0;
}
}
dbf(0,n,arrx,a,b,c);
cout<<"總方案數爲:"<<count<<endl;
count=0;
}
}