题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
代码示例:
1 #include "stdio.h"
2 #include "string.h"
3
4 #define N 100
5 int n,a[100],t;
6 int mark[25],ans[25];
7
8 void prime();
9 void DFS(int k);
10 int prime_t(int k);
11
12 int main()
13 {
14 int p=1;
15 prime();
16 while(scanf("%d",&n)!=-1)
17 {
18 printf("Case %d:
",p++);
19 memset(mark,0,sizeof(mark));
20 t=2;
21 mark[1]=1;
22 DFS(1);
23 printf("
");
24 }
25 return 0;
26 }
27
28 void DFS(int k) //回溯法(深度优先搜索)
29 {
30 int i,j;
31 if(t==n+1 && prime_t(k+1)==1)
32 {
33 printf("1");
34 for(i=2;i<=n;i++)
35 printf(" %d",ans[i]);
36 printf("
");
37 }
38 for(j=1;j<=n;j++)
39 {
40 if(mark[j]==0 && prime_t(k+j)==1 && j!=k)
41 {
42 mark[j]=1;
43 ans[t++]=j;
44 DFS(j);
45 t--;
46 mark[j]=0;
47 }
48 }
49 }
50
51 void prime() //打印素数
52 {
53 int i,j,k=0;
54 int b[100];
55 memset(b,0,sizeof(b));
56 for(i=2;i<100;i++)
57 {
58 if(b[i]==0)
59 {
60 a[k++]=i;
61 for(j=i;j<100;j+=i)
62 b[j]=1;
63 }
64 }
65 }
66
67 int prime_t(int k) //判定素数
68 {
69 int i;
70 for(i=0;i<20;i++)
71 if(k==a[i])
72 return 1;
73 return 0;
74 }