2 solutions

  • 1
    @ 2024-8-12 11:21:47
    #include<bits/stdc++.h>
    using namespace std;
    const int N=45;
    int a[N];
    int ans[N],st[N];
    int n;
    void dfs(int u)
    {
    	if(u==n)
    	{
    		if(a[ans[1]+ans[u]]==1)
    		{
    			for(int i=1;i<=n;i++)
    			{
    				cout<<ans[i]<<" ";
    			}
    			cout<<endl;
    		}
    		return ;
    	}
    	for(int i=2;i<=n;i++)
    	{
    		if(st[i]==0&&a[ans[u]+i]==1)
    		{
    			ans[u+1]=i;
    			st[i]=1;
    			dfs(u+1);
    			st[i]=0;
    		}
    	}
    }
    int main()
    {
    	a[2]=a[3]=a[5]=a[7]=a[11]=a[13]=a[17]=a[19]=a[23]=a[29]=a[31]=1; 
    	cin>>n;
    	ans[1]=1;
    	st[1]=1;
    	dfs(1); 
    	return 0;
    }
    
    • -1
      @ 2024-8-12 11:14:15
      #include<bits/stdc++.h>
      using namespace std;
      const int N=45;
      int prime[N],ans[N],st[N];
      int n;
      void dfs(int u)
      {
      	if(u==n) //已经搜索了n个 
      	{
      		if(prime[ans[1]+ans[u]]==1) //说明可以构成质数环 
      		{
      			for(int i=1;i<=n;i++)
      			{
      				cout<<ans[i]<<" ";
      			}
      			cout<<endl;
      		}
      		return ;
      	}
      	for(int i=2;i<=n;i++) //枚举所有的数 
      	{
      		if(st[i]==0&&prime[ans[u]+i]==1)
      		{
      			ans[u+1]=i; //下个位置填i 
      			st[i]=1;
      			dfs(u+1);
      			st[i]=0;//回溯 
      		}
      	}
      }
      int main()
      {
      	prime[2]=prime[3]=prime[5]=prime[7]=prime[11]=prime[13]=prime[17]=prime[19]=prime[23]=prime[29]=prime[31]=1; 
      	cin>>n;
      	ans[1]=1;
      	st[1]=1;
      	dfs(1); 
      	return 0;
      }
      
      • 1

      Information

      ID
      1258
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      7
      Tags
      (None)
      # Submissions
      19
      Accepted
      5
      Uploaded By