DFS hdu 1016
http://acm.hdu.edu.cn/showproblem.php?pid=1016
![](http://images0.cnblogs.com/blog/528013/201312/04231906-5415fe6c87244e0ca2a9589f7ace725c.png)
![](http://images0.cnblogs.com/blog/528013/201312/04231938-75973d23095c4278959346220d156f56.png)
![](http://images0.cnblogs.com/blog/528013/201312/04231957-a49ba639dd4543cdbeedeeaa0d2f5ff0.png)
#include <iostream> using namespace std; int a[30],n,used[40]; int is_prime(int x) { for(int i=2;i<x; i++) if(x%i==0) return 0; return 1; } void dfs(int cur) { int i; if(cur==n && is_prime(a[n]+a[1])) { for(i=1;i<n;i++) cout<<a[i]<<" "; cout<<a[n]<<"\n"; return; } for(i=2;i<=n;i++) { if(used[i]==0 && is_prime(a[cur]+i)) { a[cur+1]=i ; used[i]=1 ; dfs(cur+1);used[i]=0 ;} } } int main( ) { int c=1; while(cin>>n) { memset(used,0,sizeof(used)) ; a[1]=1; used[1]=1; cout<<"Case "<<c++<<":"<<endl ; dfs(1); cout<<endl; } }
![](http://images0.cnblogs.com/blog/528013/201312/04231517-cd985e1c4f35486baee56f5888437d5b.png)
![](http://images0.cnblogs.com/blog/528013/201312/04231529-e278dbfa98f14e9495a87a0d333f2bde.png)