hdu 1016 Prime Ring Problem

http://acm.hdu.edu.cn/showproblem.php?pid=1016

题意:给你一个数n,让1~n数形成相邻两个数的和是个素数的环,并把环的序列输出

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <algorithm>

 4 #define maxn 100

 5 using namespace std;

 6 bool vis[100];

 7 int f[20];

 8 bool visi[30];

 9 int n;

10 

11 void inti()

12 {

13     memset(vis,false,sizeof(vis));

14     for(int i=2; i<=maxn; i++)

15     {

16         if(!vis[i])

17         {

18             for(int j=i*i; j<=maxn; j+=i)

19             {

20                 vis[j]=true;

21             }

22         }

23     }

24 }

25 

26 void dfs(int num,int cnt)

27 {

28     if(cnt==n)

29     {

30         if(vis[f[n]+1]) return ;

31         bool flag=false;

32         for(int i=1; i<=n; i++)

33         {

34             if(!flag) printf("%d",f[i]);

35             else printf(" %d",f[i]);

36             flag=true;

37         }

38         printf("\n");

39         return ;

40     }

41     for(int i=1; i<=n; i++)

42     {

43         if(!visi[i]&&!vis[num+i])

44         {

45             f[++cnt]=i;

46             visi[i]=true;

47             dfs(i,cnt);

48             cnt--;

49             visi[i]=false;

50         }

51     }

52 }

53 

54 int main()

55 {

56     inti();

57     int cas=1;

58     while(scanf("%d",&n)!=EOF)

59     {

60         memset(visi,false,sizeof(visi));

61         f[1]=1;

62         visi[1]=true;

63         printf("Case %d:\n",cas++);

64         dfs(1,1);

65         printf("\n");

66     }

67     return 0;

68 }
View Code

 

你可能感兴趣的:(Prim)