HDU 1016 Prime Ring Problem

在刚刚写完代码的时候才发现我以前交过这道题,可是没有过。

后来因为不理解代码,于是也就不了了之了。

可说呢,那时的我哪知道什么DFS深搜的东西啊,而且对递归的理解也很肤浅。

这道题应该算HDU 2610 Sequence one的简化版,判重也非常简单。

其他也没有什么好说的了,直接上代码吧。

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 using namespace std;
 7 
 8 int prime[41] = {0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};
 9 bool visited[21];
10 int n, a[21];
11 
12 void DFS(int dep)
13 {
14     if(dep==n && prime[a[dep-1] + a[0]])
15     {
16         for(int i = 0; i < dep-1; ++i)
17             printf("%d ", a[i]);
18         printf("%d
", a[dep-1]);
19         return;
20     }
21     for(int i = 2; i <= n; ++i)
22     {
23         if(!visited[i] && prime[a[dep-1] + i])
24         {
25             visited[i] = true;
26             a[dep] = i;
27             DFS(dep + 1);
28             visited[i] = false;
29         }
30     }
31 }
32 
33 int main(void)
34 {
35     #ifdef LOCAL
36         freopen("1016in.txt", "r", stdin);
37     #endif
38 
39     int kase = 0;
40     while(scanf("%d", &n) == 1)
41     {
42         printf("Case %d:
", ++kase);
43         a[0] = 1;
44         memset(visited, false, sizeof(visited));
45         DFS(1);
46         puts("");
47     }
48     return 0;
49 }
代码君
原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3918527.html