题目大意:给出n 求1……n 组成的素数环 即环内任意两数和为素数。 思路:深搜回溯 使用递归~ 一开始看了别人的代码后自己写了遍 没有对循环内visit[]重新标记~ 记住记住~ #include <iostream> using namespace std; bool prime[41],visit[20]; int ans[20]; int n; void init() { memset(prime,1,sizeof(prime)); int i,j; for(i=2;i<7;i++) if(prime[i]) for(j=i*i;j<41;j+=i) prime[j]=0; } void dfs(int d) { int i; if(d==n) { if(!prime[ans[n-1]+1]) return ; for(i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d/n",ans[i]); return ; } for(i=2;i<=n;i++) if( !visit[i] && prime[ans[d-1]+i] ) { visit[i]=1; ans[d]=i; dfs(d+1); visit[i]=0; } return ; } int main() { int c; c=1; init(); while(scanf("%d",&n)!=EOF) { memset(visit,0,sizeof(visit)); visit[1]=1; ans[0]=1; printf("Case %d:/n",c++); dfs(1); printf("/n"); } return 0; }