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

hdu1016【dfs】

时间:2014-10-30 20:41:33      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   for   sp   div   on   

  题目很简单,给出n(1<n<20),将1-n这n个数字排成一个环,使得这个环所有相邻的数字之和都是素数,打印出所有可能。

  直接深搜,逐个递归时判断素数剪枝即可~

 

  

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 bool prime[40];
 5 bool hash[40];
 6 int ans[40];
 7 int n;
 8 int cas = 1;
 9 
10 void getprime() {
11     memset(prime, 0, sizeof(prime));
12     int a[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
13     for(int i = 0; i < 12; i++)
14         prime[a[i]] = true;
15     return;
16 }
17 
18 void dfs(int id, int fro) {
19     if (id == n) {
20         if (!prime[ans[n - 1] + 1])
21             return;
22         
23         for(int i = 0; i < n - 1; i++)
24             cout << ans[i] << " ";
25         cout << ans[n - 1] << endl;
26     }
27     
28     for(int i = 2; i <= n; i++) {
29         if (hash[i]) continue;
30         if (!prime[fro + i]) continue;
31         hash[i] = true;
32         ans[id] = i;
33         dfs(id + 1, i);
34         hash[i] = false;
35     }
36 }
37 
38 int main() {
39     getprime();
40     ans[0] = 1;
41     while(cin >> n) {
42         printf("Case %d:\n", cas++);
43         memset(hash, 0, sizeof(hash));
44         dfs(1, 1);
45         cout << endl;
46     }
47     return 0;
48 } 
49 
50 /*
51 6 
52 8
53 Case 1:
54 1 4 3 2 5 6
55 1 6 5 2 3 4
56 
57 Case 2:
58 1 2 3 8 5 6 7 4
59 1 2 5 8 3 4 7 6
60 1 4 7 6 5 8 3 2
61 1 6 7 4 3 8 5 2
62 */

 

hdu1016【dfs】

标签:style   blog   io   color   os   for   sp   div   on   

原文地址:http://www.cnblogs.com/bigbigsunrise/p/4063464.html

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