N皇后问题

代码

#include<iostream>
#include<algorithm>
using namespace std;
int cur,sum=0,n;
int a[25],b[13];
int ok(int x){
	int i;
	for(i=1;i<x;i++)
	{
		//判断是否同列了或在相同斜线 
		if(a[i]==a[x]||abs(a[i]-a[x])==abs(i-x))
		return 1;
	}
	return 0;
}
int func(int q){
	for(int i=1;i<=n;i++)
	{
		a[q]=i;
		if(ok(q)==0){//如果当前行放的于前面没有冲突就试探下去 
			if(q==n) {
//				for(int j=1;j<=n;j++)
//				printf("(%d,%d)",j,a[j]);
//				cout<<endl;
				sum++;
			}
			else 
				func(q+1);
		}
	}
}
int main(){
	
	for(int i=1;i<=10;i++)
	{   n=i;
	  sum=0;
	   func(1);
	   b[i]=sum;
	}
	//freopen("in.txt","r",stdin);
	while(cin>>n&&n){
     	cout<<b[n]<<endl;
	}
	return 0;
}
posted @ 2019-03-15 18:58  ChunhaoMo  阅读(87)  评论(0编辑  收藏  举报