UVa 524 Prime Ring Problem【回溯】

题意:给出n,把从1到n排成一个环,输出相邻两个数的和为素数的序列

照着紫书敲的, 大概就是这个地方需要注意下,初始化的时候a[0]=1,然后dfs(1),从第1个位置开始搜

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath> 
 5 #include<stack>
 6 #include<vector>
 7 #include<map> 
 8 #include<queue> 
 9 #include<algorithm>  
10 #define mod=1e9+7;
11 using namespace std;
12 
13 typedef long long LL;
14 int a[1005],vis[1005],isp[1005];
15 int n;
16 
17 void is_prime(){
18     isp[1]=isp[0]=1;
19     for(int i=2;i<=1005;i++){
20         if(isp[i]==0){
21             for(int j=i*2;j<=1005;j+=i)
22             isp[j]=1;
23         }
24     }
25 }
26 
27 void dfs(int cur){
28     int i;
29     if(cur==n&&!isp[a[0]+a[n-1]]){
30         for( i=0;i<n-1;i++) printf("%d ",a[i]);
31         printf("%d
",a[i]);
32     }
33     
34     else for(i=2;i<=n;i++)
35     if(!vis[i]&&!isp[i+a[cur-1]]){
36         a[cur]=i;
37         vis[i]=1;
38         dfs(cur+1);
39         vis[i]=0;
40     }
41 }
42 
43 int main(){
44     int t=0;
45     is_prime();
46     while(cin>>n){
47         memset(vis,0,sizeof(vis));
48        a[0] = 1;
49         vis[1] = 1;
50         if(t) printf("
");
51         printf("Case %d:
", ++t);
52         dfs(1);
53     }
54     return 0;
55 }
View Code

自己写的时候,直接是dfs(0),什么都输不出来,可是为什么是这样呢= = 学习回溯的第一题目 = = 再好好理解- -

原文地址:https://www.cnblogs.com/wuyuewoniu/p/4355027.html