[Classic topic] n queen problem

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int b[100];//储存第k行的放置皇后的列数 
int n,ans=0;

void print(){
	 for(int i=1; i<=n; ++i){
        for(int j=1; j<=n; ++j){
            if(j==b[i]) cout<<"1 ";
            else cout<<"0 ";
        }
        cout<<endl;
    }
    cout<<endl;
}

void queen(int k){ 
	if(k==n+1) {
		print();
		ans++;
		return;
	}
	
	for(int i=1;i<=n;i++){
		b[k]=i;
		bool flag=1;
		for(int j=1;j<k;j++){
			if(b[k]==b[j]||abs(b[k]-b[j])==abs(k-j))
			{
				flag=0;
				break;
			}
		}
		if(flag) queen(k+1);
	}
}
int main(){
	cin>>n;
	queen(1);
	cout<<ans<<endl;
	return 0;
}

 

Guess you like

Origin blog.csdn.net/melon_sama/article/details/108635446