码迷,mamicode.com
首页 > 其他好文 > 详细

A - Prime Ring Problem (素数圈)

时间:2017-07-30 11:41:24      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:ace   ant   cas   continue   一个   idt   include   pac   put   

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 (素数圈)

标签:ace   ant   cas   continue   一个   idt   include   pac   put   

原文地址:http://www.cnblogs.com/a2985812043/p/7258448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!