HDU 1016 Prime Ring Problem
链接: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; }