链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
DFS的经典题
#include<iostream>
#include<cstring>
using namespace std;
int ring[25];
bool prime[45];
bool visit[25];
void isprime(int n)
{
int i,j;
for(i=2;i<n; i++)
{
for(j=2;i*j<n;j++)
{
if(prime[i*j])
prime[i*j]=false;
}
}
}
void dfs(int cnt,int n)
{
int i;
if(cnt==n && prime[ring[0]+ring[n-1]]) //找出一个符合条件的环
{
for(i=0; i<n; i++)
cout<<ring[i]<<" ";
cout<<endl;
}
else
for(i=2; i<=n; i++)
{
if((!visit[i]) && prime[ring[cnt-1]+i])
{
ring[cnt]=i;
visit[i]=true;
dfs(cnt+1,n); //选i
visit[i]=false;
}
}
}
int main()
{
int n;
int i;
for(i=2;i<45;i++)
prime[i]=true;
isprime(45);
ring[0]=1;
i=1;
while(cin>>n)
{
memset(visit,0,sizeof(visit));
cout<<"Case "<<i++<<":"<<endl;
dfs(1,n);
cout<<endl;
}
return 0;
}