为了账号安全,请及时绑定邮箱和手机立即绑定

搜索——素数环(hdu1016)

标签:
算法

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1016

题目描述:

输出满足相邻的相加是素数的序列(注意不要重复)

解题思路:

类似于一些数字全排列的搜索,也就算是暴力深搜吧。

不重复的话,用一个状态flag记录下i是否被用过即可


#include<stdio.h>#include<string.h>int Z_nPrime[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};//素数打表,因为n最大是20,所以只要打到40int Z_nflag[21],V_nQueue[21];int n;void dfs(int count)//深搜{int i;if(count==n&&Z_nPrime[V_nQueue[count-1]+V_nQueue[0]])  //满足条件了,就输出来{for(i=0;i<count-1;i++)printf("%d ",V_nQueue[i]);printf("%d\n",V_nQueue[count-1]);}else{for(i=2;i<=n;i++){if(!Z_nflag[i])//是否用过了{if(Z_nPrime[i+V_nQueue[count-1]]) //是否和相邻的加起来是素数{Z_nflag[i]=-1;//标记了V_nQueue[count++]=i;//放进数组dfs(count); //递归调用Z_nflag[i]=0; //退去标记count--;}}}}}int main(){int num=0;while(scanf("%d",&n)!=EOF){num++;printf("Case %d:\n",num);memset(Z_nflag,0,sizeof(Z_nflag));V_nQueue[0]=1;dfs(1);printf("\n");}return 0;}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消