hdoj2553—N皇后

打表程序:

#include<stdio.h>
#include<stdlib.h>
int visit[15][15];
int count=0;
void flag(int x,int y,int n)
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		visit[i][y]++;
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			if(i+j==x+y)
				visit[i][j]++;
			if(i-j==x-y)
				visit[i][j]++;
		}
	return;
}
void unflag(int x,int y,int n)
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		visit[i][y]--;
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			if(i+j==x+y)
				visit[i][j]--;
			if(i-j==x-y)
				visit[i][j]--;
		}
	return;	


}
void dfs(int cur,int n)
{
	if(cur==n+1)
	{
		count++;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(!visit[cur][i])
		{
			visit[cur][i]++;
			flag(cur,i,n);
			dfs(cur+1,n);
			visit[cur][i]--;
			unflag(cur,i,n);
		}
	}
return;
}
int main()
{
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=i;j++)
			for(int k=1;k<=i;k++)
				visit[j][k]=0;
		count=0;
		dfs(1,i);
		printf("%d\n",count);
	}

system("pause");
return 0;
}

程序代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n;
	int result[11]={0,1,0,0,2,10,4,40,92,352,724};
	scanf("%d",&n);
	while(n!=0)
	{
		printf("%d\n",result[n]);
	
	
		scanf("%d",&n);
	}
return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>