hdu 1016 Prime Ring Problem

来源:互联网 发布:前端优化方法 编辑:程序博客网 时间:2024/05/22 08:01
简单题,直接dfs即可。
#include <stdio.h>int n,a[30],f[50],g[30];void print(){int i;printf("1");for (i=2;i<=n;i++) printf(" %d",a[i]);printf("\n");}void dfs(int t){int i;if ((t>n)&&(f[a[n]+1])) {print(); return;}for (i=2;i<=n;i++)if ((g[i])&&(f[i+a[t-1]])){g[i]=0; a[t]=i;dfs(t+1);g[i]=1;}}int main(){int i,j,count=0;while (scanf("%d",&n)!=EOF){for (i=2;i<=2*n;i++) f[i]=1;f[0]=f[1]=0;for (i=2;i<=2*n;i++)if (f[i]){j=i+i;while (j<=50) {f[j]=0; j+=i;}}for (i=2;i<=n;i++) g[i]=1;g[1]=0; a[1]=1;count++;printf("Case %d:\n",count);dfs(2);printf("\n");}return 0;}

0 0