HDU 1016 Prime Ring Problem(DFS)

素数环。。DFS暴搜。。

很奇怪为什么用C++交总提示我SQRT调用不明确。。

还是用G++提交吧。。

#include<stdio.h>
#include<string.h>
#include<math.h>

int visited[21];
int num[21];

int n;

void print()
{
	for (int i=0; i<n; i++) {
		printf("%d",num[i]);
		if(i!=n-1) putchar(' ');
	}
	putchar('\n');
}

int sushu(int p)
{
	for (int i=2; i<=sqrt(p); i++)
		if (p%i==0) return 0;
	
	return 1;
}

void dfs(int t)
{
	if(t==n) {print(); return;}
	
	for (int i=2; i<=n; i++) {
		if (!visited[i] && sushu(num[t-1]+i) && ((t==n-1)? sushu(1+i):1)) {
			visited[i]=1;
			num[t]=i;
			dfs(t+1);
			visited[i]=0;
		}
	}
}

int main()
{
	int Case=1;
	num[0]=1;
	while (~scanf("%d",&n)) {
		memset(visited, 0, sizeof(visited));
		visited[1]=1;
		printf("Case %d:\n",Case++);
		dfs(1);
		putchar('\n');
	}
}

posted on 2011-07-08 15:11  Eucalyptus  阅读(129)  评论(0编辑  收藏  举报