Prime Ring Problem(搜索 深度优先)
2013-05-16 11:31
309 查看
/* HDU 1016 */ #include <iostream> #include <stdio.h> using namespace std; int num[21],mark[21],n;//数组num 储存需输出的结果 int prim(int t)//判断是否为素数 { for(int i=2;i*i<=t;i++) if(t%i==0) return 0; return 1; } void print_num()//输出一次结果 { for(int i = 1; i < n;i++)//循环输出所有num printf("%d ",num[i]); printf("%d",num ); } int dfs(int pre,int post,int flag)//pre为前一个数,post为后一个数,flag 为第几个节点 { if(!prim(pre+post))//若相加不为素数,直接返回0 return 0; num[flag]=post;//若相加为素数 则存入num的第flag个元素中 if(flag==n&&prim(post+1))//直至循环至最后一次即post=n且 最后数加第一个数1也为素数输出结果 { print_num(); printf("\n"); return 1; } mark[post]=0;//mark中第post个元素置零----用过的数置为零 for(int i = 2;i<=n;i++) if(mark[i]!=0&&dfs(post,i,flag+1))//mark中第i个元素未被置零(即未被用过) //且下一个节点返回值为1(即下一结点为素数) break; //跳出循环 mark[post]=1;//未被用过的数置为一 return 0; } int main() { int count; count=1; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) mark[i]=i; num[1]=1; printf("Case %d:\n",count++); if(n==1)printf("1\n"); for(int i = 2;i<=n;i++) dfs(1,i,2);//递归 printf("\n"); } }
相关文章推荐
- HDU--杭电--1016--Prime Ring Problem--深度优先搜索--此类中的水题
- Prime Ring Problem (素数环)深度优先搜索
- hdoj1016 Prime Ring Problem (深度搜索)
- 【暴力搜索】[HDU 1016]Prime Ring Problem
- 杭电1016Prime Ring Problem DFS 搜索
- 搜索专题(DFS)HDU 1016-Prime Ring Problem
- HDU1016 - Prime Ring Problem (简单搜索)
- 紫书搜索 例题7-4 UVA - 524 Prime Ring Problem
- hdu 1016 Prime Ring Problem 搜索
- HDU 1016 Prime Ring Problem(搜索入门题 DFS,多种方式)
- HDU 1016 Prime Ring Problem DFS + 记忆化搜索
- Prime Ring Problem(搜索)
- HDOJ 1016 Prime Ring Problem 简单搜索
- HDOJ搜索专题之Prime Ring Problem
- poj3126 Prime Path BFS深度优先搜索
- 杭电1016Prime Ring Problem(搜索)
- ACM 搜索 hdu1016 Prime Ring Problem
- HDU 1016 Prime Ring Problem 搜索题
- HDU1016 Prime Ring Problem(搜索,DFS)
- 搜索——Hdu_1016_Prime Ring Problem