Uva 524 Prime Ring

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 524 Prime Ring相关的知识,希望对你有一定的参考价值。

 如果用全排列生成之后,在判断是否是素数环是会超时的,应该用回溯。

回溯的时候  首先要注意 递归边界 ,结束的时候别忘记判断最后一个和第一个元素能否成立 

还有要记得vis的使用和递归之后的清理。

 1 #include <cstdio>
 2 #include <cstring>
 3 using  namespace std;
 4 int n,p=0;
 5 int a[50+10],vis [50+10];
 6 bool isprime[50+10];
 7 void  dfs(int cur)
 8 {
 9     if(cur==n && isprime[a[n-1]+a[0]])
10     {
11         printf("%d",a[0]);
12         for(int i=1;i<n;i++)
13             printf(" %d",a[i]);
14         printf("\n");
15         return ;
16     }
17 
18     for(int i=2;i<=n;i++)
19     {
20         if(vis[i]==0 && isprime[ a[cur-1]+i ] )
21         {
22             vis[i]=1;a[cur]=i;
23             dfs(cur+1);
24             vis[i]=0;
25         }
26     }
27 }
28 int  main()
29 {
30     for(int i=0;i<=49;i++)   isprime[i]=true;
31     isprime[0]=isprime[1]=false;
32     for(int i=2;i<=7;i++)
33     {
34         if(isprime[i])
35         {
36             for(int j=i*i;j<=49;j+=i)
37             {
38                 isprime[j]=false;
39             }
40         }
41     }
42     int flag=0;
43     while(~scanf("%d",&n))
44     {
45         if(flag) printf("\n");
46         flag=1;
47 
48         printf("Case %d:\n",++p);
49         memset(vis,0,sizeof(vis));
50 
51         a[0]=1;vis[1]=1;
52         dfs(1);
53 
54     }
55     return 0;
56 }

 

以上是关于Uva 524 Prime Ring的主要内容,如果未能解决你的问题,请参考以下文章

uva 524 prime ring problem——yhx

UVA524-Prime Ring Problem(搜索剪枝)

UVa 524 Prime Ring Problem(回溯法)

UVA524 素数环 Prime Ring Problem

Uva 524 Prime Ring

UVA - 524 Prime Ring Problem(素数环)(回溯法)