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\n", 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:\n", ++kase);

43         a[0] = 1;

44         memset(visited, false, sizeof(visited));

45         DFS(1);

46         puts("");

47     }

48     return 0;

49 }
代码君

 

你可能感兴趣的:(Prim)