HUAS Summer Trainning #3 C

Description

Download as PDF
 

A ring is composed of n (even number) circles as shown in diagram. Put natural numbers $1, 2, \dots, 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.

 

Input 

n (0 < n <= 16)

 

Output 

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements.

 

You are to write a program that completes above process.

Sample Input 

6
8

 

Sample Output 

Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2

题目大意:使1~n这些数组成环,并且两两相加要是素数,输出所有的解。

解题思路:第一个数总是1,直接用DFS从第二数开始遍历,遍历到底部不满足,回溯到上一个个节点,知道遍历完所有的可行解。

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn=50+5;
 5 int a[maxn],b[maxn],d[maxn],n,i,j;
 6 int sushu(int x)
 7 {
 8     for(i=2;i*i<=x;i++)
 9         if(x%i==0)
10             return 0;
11     return 1;
12 }
13 void dfs(int cur)
14 {
15     if(cur==n&&d[a[0]+a[cur-1]])
16     {
17         cout<<a[0];
18         for(int  i=1;i<n;i++)
19             cout<<" "<<a[i];
20         cout<<endl;
21     }
22     else
23     {
24         for(int i=2;i<=n;i++)
25         {
26             if(!b[i]&&d[i+a[cur-1]])
27             {
28                 a[cur]=i;
29                 b[i]=1;
30                 dfs(cur+1);
31                 b[i]=0;
32             }
33         }
34     }
35 }
36 int main()
37 {
38     int p=0,t=0;
39     while(cin>>n&&n)
40     {
41         if(p++)
42             cout<<endl;    
43         cout<<"Case "<<++t<<":"<<endl;
44     
45       memset(a,0,sizeof(a));
46       memset(d,0,sizeof(d));
47       for(j=2;j<n*2;j++)
48           d[j]=sushu(j);
49       memset(b,0,sizeof(b));
50       a[0]=1;
51       dfs(1);
52     }
53     return 0;
54 }

 

posted on 2015-08-01 15:44  最爱剪刀手  阅读(108)  评论(0编辑  收藏  举报