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\n",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("\n");

51         printf("Case %d:\n", ++t);

52         dfs(1);

53     }

54     return 0;

55 }
View Code

 

 

 

 

 

 

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

 

你可能感兴趣的:(Prim)