HDU 1016 Prime Ring Problem

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1016

题解:

深搜,看了题解敲的,理解还不是很透彻,先存代码,题解后补。

代码:

#include
#include
#include
int n;
int A[25];
bool visit[25];
bool prime(int x)
{
	int flag=0;
	for(int i=2;i<=sqrt((double)x);i++)
	{
		if(x%i==0) 
		{
			flag=1;
			break;
		}
	}
	return !flag;
}
void dfs(int cur)
{
	int i;
	if(cur==n&&prime(A[0]+A[n-1]))
	{
		printf("1");

		for(i=1;i<=n-1;i++)
			printf(" %d",A[i]);
		printf("\n");
	}
	else 
	{
		for(i=2;i<=n;i++)
		{
			if(!visit[i]&&prime(i+A[cur-1]))
			{
				visit[i]=1;
				A[cur]=i;
				dfs(cur+1);
				visit[i]=0;
			}
		}
	}
}
int  main()
{
	int t=1;
	A[0]=1;
	while(~scanf("%d",&n))
	{
		memset(visit,0,sizeof(visit));
		printf("Case %d:\n",t++);
		dfs(1);
		printf("\n");
	}
	return 0;
}


你可能感兴趣的:(HDU,ACM,编程,HDU,DFS)