N皇后问题(递归做法)

//回溯算法 
#include<iostream>
#include<memory.h>
#include<math.h> 
using namespace std;
int a[101];
int n=4; 
int sum=0,flag=0;
void digui(int k)
{
	if(k==n+1)
	{
		sum++;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		a[k]=i;
		flag=1;
		for(int j=1;j<k;j++)
		{
			if(a[k]==a[j]||abs(k-j)==abs(a[k]-a[j]))
			{
				flag=0;
				break;	
			}
		}
		if(flag==1)
			digui(k+1);
	}
}
int main()
{  
   sum=0;
   digui(1);//递归的入口是1 
   cout<<sum<<endl;
}

posted @ 2017-03-09 20:38  X_na  阅读(298)  评论(0)    收藏  举报