您的位置:首页 > 其它

hdu 1016 Prime Ring Problem

2013-07-19 19:17 387 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1016

Prime Ring Problem

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19551 Accepted Submission(s): 8742


[align=left]Problem Description[/align]
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.

Note: the number of first circle should always be 1.

#include<stdio.h>
#include<string.h>
#include<math.h>
int num[20],vis[20],n;
int is_prime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;

}
void dfs(int x,int k)
{
int i;
if(k==n &&is_prime(1+x))
{
for(i=0;i<n;i++)
printf("%d%c",num[i],i==k-1?'\n':' ');
}
for(i=2;i<=n;i++)
{
if(is_prime(x+i)&&!vis[i])
{
// printf("x=%d,i=%d,k=%d\n",x,i,k);
vis[i]=1;
num[k]=i;
dfs(i,k+1);
vis[i]=0;
}
}
}
int main()
{
int count=1;
while(scanf("%d",&n)!=EOF)
{
memset(vis,0,sizeof(vis));
printf("Case %d:\n",count++);
num[0]=1;
dfs(1,1);
printf("\n");

}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: