A - Prime Ring Problem (素数圈)

Posted 山杉三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A - Prime Ring Problem (素数圈)相关的知识,希望对你有一定的参考价值。

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. 

技术分享 

Inputn (0 < n < 20). 
OutputThe 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. Print solutions in lexicographical order. 

You are to write a program that completes above process. 

Print a blank line after each case. 
Sample Input

6
8

Sample OutpuCase 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

题目意思:
给你一个20以内的正整数n,将1到n围成一个圈,每个数都和旁边数的和为素数
输出所以可能的情况

解法:普通的应用DFS的题目,注意跳出条件就可以了;

 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4 
 5 const int  MAX = 100;
 6 int n;
 7 int visit[MAX];
 8 int Map[MAX];
 9 int a[MAX] = {3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};
10 
11 void print()
12 {
13     for(int i = 1;i <=n;i++)
14         if(i==1)
15         cout<<Map[i];
16         else
17         cout<<" "<<Map[i];
18     cout<<endl;
19 }
20 
21 int pand(int x)
22 {
23     for(int i = 0;i<16;i++)
24         if(x==a[i])
25             return 1;
26     return 0;
27 }
28 
29 void dfs(int x,int ti)
30 {
31     if(ti==n)
32     {
33         if(pand(x+1))
34         {
35             print();
36         }
37     }
38 
39     for(int i = 2;i <= n;i++)
40     {
41         if(visit[i]==0 &&pand(i+x))
42         {
43             visit[i] = 1;
44             Map[ti+1] = i;
45             dfs(i,ti+1);
46             visit[i] = 0;
47         }
48     }
49 
50 }
51 
52 int main()
53 {
54     int N=0;
55     while(cin>>n)
56     {
57         cout<<"Case "<<++N<<":"<<endl;
58         if(n==1)
59         {
60             cout<<1<<\n<<endl;
61         continue;
62         }
63 
64         memset(visit,0,sizeof(visit));
65         visit[1] = 1;
66         Map[1] = 1;
67         dfs(1,1);
68         cout<<endl;
69 
70     }
71 
72     return 0;
73 }

 



































以上是关于A - Prime Ring Problem (素数圈)的主要内容,如果未能解决你的问题,请参考以下文章

uva 524 prime ring problem——yhx

hdu1016 Prime Ring Problem

A - Prime Ring Problem

[2016-02-19][UVA][524][Prime Ring Problem]

A - Prime Ring Problem (素数圈)

hdu 1016 Prime Ring Problem(深度优先搜索)