现在的位置: 首页 > 综合 > 正文

hdu 2553 (N皇后)

2014年01月30日 ⁄ 综合 ⁄ 共 475字 ⁄ 字号 评论关闭

点击打开链接

递归的经典题目。。。

#include"stdio.h"
#include"string.h"
#include"math.h"
#define N 20
int a[N],b[N];
int n,sum;
int judge(int x)
{
	int i;
	for(i=1;i<x;i++)
	{
		//同列或同在对角线上,返回0
		if(b[i]==b[x]||abs(x-i)==abs(b[x]-b[i]))
			return 0;
	}
	return 1;
}
int queen(int x)
{
	int i;
	if(x>n)//如果第n个已经放好,就可以放第n+1个了。。。
		sum++;
	else
	{
		for(i=1;i<=n;i++)
		{
			b[x]=i;
			if(judge(x))
				queen(x+1);
		}
	}
	return sum;
}
int main()
{
	int i;
	for(i=1;i<=10;i++)
	{
		n=i;
		sum=0;
		memset(b,0,sizeof(b));
		a[i]=queen(1);//从1开始递归
	}
	while(scanf("%d",&n)&&n)
		printf("%d\n",a[n]);
	return 0;
}

抱歉!评论已关闭.