题意:给出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 }
自己写的时候,直接是dfs(0),什么都输不出来,可是为什么是这样呢= = 学习回溯的第一题目 = = 再好好理解- -
时间: 2024-10-01 14:15:29