素数环
每相邻的两个数之和为素数,DFS搜索+素数判断题目链接
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 50
int a[50];
bool vis[N];
int n;
bool judge(int x,int y)
{
int m=x+y;
for(int i=2;i*i<=m;i++)
if(m%i==0)
return false;
return true;
}
//int count;
void dfs(int cur)
{
if(cur==n&&judge(a[0],a[n-1]))
{
for(int i=0;i<n;i++)
{
if(!i)
cout<<a[i];
else
cout<<" "<<a[i];
}
cout<<endl;
// count=0;
}
else
{
for(int i=2;i<=n;i++)
{
if((!vis[i])&&judge(i,a[cur-1]))
{
vis[i]=true;
a[cur++]=i;
dfs(cur);
vis[i]=false;
cur--;
}
}
}
}
int main()
{
int num=0;
while(cin>>n)
{
a[0]=1;
memset(vis,false,sizeof(vis));
printf("Case %d:\n",++num);
dfs(1);
cout<<endl;
}
return 0;
}