您的位置:首页 > 其它

HDU 1016 Prime Ring Problem

2015-10-24 00:24 375 查看
分析:给你n个球序号分别为1,2....n,让你排成一个环,使得任意相邻2个球的序号和为素数,输出所有满足条件的序列,1是开头,按字典序输出。这题可以看做是n个顶点,任意两个顶点之间有一条无向边,遍历所有顶点,使得遍历的结果围成一个圈,任意2个相邻的点的和为素数,然后用DFS遍历图。

# include <stdio.h>
# include <string.h>
int n,top,s[35],visit[25],stack[25];
void DFS(int a)
{
int i,j;
for(i=2;i<=n;i++)
if(!visit[i]&&s[i+stack[top]]==1)
{
stack[++top]=i;
visit[i]=1;
if(top==n-1&&s[i+1]==1)
{
for(j=0;j<top;j++)
printf("%d ",stack[j]);
printf("%d\n",stack[j]);
}
else
DFS(i);
top--;
visit[i]=0;
}
}
int main()
{
int i,j,t=1;
memset(s,0,sizeof(s));
s[2]=s[3]=s[5]=s[7]=s[11]=s[13]=s[17]=s[19]=s[23]=s[29]=s[31]=1;
while(scanf("%d",&n)!=EOF)
{
printf("Case %d:\n",t++);
if(n&1)
{printf("\n");continue;}
memset(visit,0,sizeof(visit));
visit[1]=1;
top=-1;
stack[++top]=1;
DFS(1);
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: