Prime Ring Problem---hdu1016(dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1016
这就是一道简单的dfs 但是是我自己想起来的 必须要记录一下
#include<stdio.h> #include<string.h> #include<algorithm> #include<queue> using namespace std; #define N 50 int a[N]; int vis[N]; int t; void prime() { memset(a,0,sizeof(a)); for(int i=2;i<25;i++) { if(a[i]==0) { for(int j=i+i;j<N;j=j+i) { a[j]=1; } } } } void dfs(int k,int n,int m) { if(n==1&&a[1+k]==0) { for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { if(vis[j]==i) { if(i==1) printf("%d",j); else printf(" %d",j); } } } printf("\n"); } for(int i=2;i<=m;i++) { if(a[k+i]==0&&vis[i]==0) { vis[i]=vis[k]+1; dfs(i,n-1,m); vis[i]=0; } } } int main() { prime(); int n; t=1; while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",t++); memset(vis,0,sizeof(vis)); vis[1]=1; dfs(1,n,n); printf("\n"); } return 0; }