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

HDU 1016 Prime Ring Problem (素数筛+DFS)

时间:2014-07-30 23:08:45      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

题目链接

题意 : 就是把n个数安排在环上,要求每两个相邻的数之和一定是素数,第一个数一定是1。输出所有可能的排列。

思路 : 先打个素数表。然后循环去搜。。。。。

bubuko.com,布布扣
 1 //1016
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 
 6 using namespace std ;
 7 
 8 bool vis[21];
 9 int prime[42] ,cs[21];
10 int n ;
11 
12 void get_prime()
13 {
14     memset(prime,0,sizeof(prime));
15     prime[1] = 1 ;
16     for(int i = 2 ; i < 40 ; i ++)
17     {
18         if(prime[i] == 0)
19         {
20             for(int j = i*i ; j < 40 ; j += i)
21                 prime[j] = 1 ;
22         }
23     }
24 }
25 
26 void DFS(int s,int cnt)
27 {
28     if(cnt == n)
29     {
30         if(prime[cs[n]+1]) return ;
31         for(int i = 1 ; i <= n - 1; i++)
32             cout << cs[i] <<" " ;
33         cout << cs[ n ]<<endl ;
34         return ;
35     }
36     for(int i = 1 ; i <= n ; i++)
37     {
38         if(!vis[i] && !prime[s+i])
39         {
40             cs[++cnt] = i ;
41             vis[i] = true ;
42             DFS(i,cnt) ;
43             cnt -- ;
44             vis[i] = false ;
45         }
46     }
47 }
48 int main()
49 {
50     int casee = 1 ;
51     get_prime() ;
52     while(  cin >> n )
53     {
54         memset(vis,false,sizeof(vis)) ;
55         cout << "Case "<<casee++ <<":" << endl ;
56         vis[1] = true ;
57         cs[1] = 1;
58         DFS(1,1) ;
59         cout << endl ;
60     }
61     return 0 ;
62 }
View Code

 

HDU 1016 Prime Ring Problem (素数筛+DFS),布布扣,bubuko.com

HDU 1016 Prime Ring Problem (素数筛+DFS)

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/luyingfeng/p/3879072.html

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