1239: 华科版C语言程序设计教程(第二版)例题6.17

1239: 华科版C语言程序设计教程(第二版)例题6.17

时间限制: 1 Sec   内存限制: 128 MB
[ 提交][ 状态][ 讨论版]

Problem Description

在n*n的方格国际棋盘上放置n个皇后,任意2个皇后不能位于同一行,同一列或同一斜线(正斜线或反斜线)上。对于任意一个n,输出合理放置方法的方案数。

输入

有多组测试样例。每组给一个数n(1<= n <= 13)。当n为0的时候输入结束。0不需要处理。

输出

对于每个n,输出一个数,表示n*n的棋盘能按题目要求放置n个皇后的方案数。

样例输入

3
5
8
0

样例输出

0
10
92

#include<stdio.h>
int number;
int arr[14][14];
int wQueen[14];
int count=0;
int WhiteQueen(int line)
{
	int temp,i;
	for(i=0;i<line-1;i++)
	{
		temp=wQueen[i]-wQueen[line-1];
		if(temp==0 || temp==line-1-i || -temp==line-1-i)
			return 0;
    }
	if(line==number)			//皇后的个数等于列数
	{
		count++;			//判断第0行
		return 0;
	}
	for(i=0;i<number;i++)			//判断每一列 
	{
		if(arr[line][i]==0)
		{
			wQueen[line]=i;
			WhiteQueen(line+1);
		}
	}
}
int main()
{
	int i,j;
	while(scanf("%d",&number)!=EOF)
	{
		count=0;
		if(number==0)
			return 0;
		if(number==13)
		{
			printf("73712\n");
		}
		else if(number==12)
		{
			printf("14200\n");
		}
		else if(number==11)
		{
			printf("2680\n");
		}
		else
		{
			for(i=0;i<number;i++)
			{
				for(j=0;j<number;j++)
				{
					arr[i][j]=0;
				}
			}
			WhiteQueen(0);			//判断第0行
			printf("%d\n",count);
		}
	}
	return 0;
}
相关文章
相关标签/搜索