搜索—Problem_1020-Prime Ring Problem
来源:互联网 发布:知乎精彩回答 编辑:程序博客网 时间:2024/06/05 02:18
搜索—Problem_1020-Prime Ring Problem
题意
有N个连续的自然数围成一圈,要求重新组合它们的顺序使得任意相邻两个数的和为素数。输出符合要求的顺序。
解题思路
采用DFS。很笨的方法,对当前一个数,展开DFS,把每一种可能的方法都罗列出来,由于所规定数不超过20,所以把40以内的素数都写到数组里,让两个数的和去跟它们比较是否相等就能判断是不是素数了,符合条件的放入数组里,完成一遍,找到合适的顺序就把它们输出。
感想
对判断素数时偷懒,写了数组然后遍历的方法比较是否为素数吗,还有输出等的语句导致代码中太多for循环使得提交时多次超时,然后把cin与cout改成了scanf与printf的形式,侥幸AC了,不过还是要对代码改进下比较好。
AC代码
#include<iostream>using namespace std;#define MAX 25int n;int visit[MAX],num[MAX];int prime_num[12]={2,3,5,7,11,13,17,19,23,29,31,37};bool is_prime(int a){ for(int i=0;i<12;i++) if( a==prime_num[i] ) return true; return false;}void print_num(){ for(int i=1;i<n;i++) printf("%d ",num[i]); printf("%d",num[n]); }int DFS(int pre,int post,int flag){ //如果不符合,直接返回 if( !is_prime(pre+post) ) return 0; num[flag] = post; if( flag==n && is_prime(post+1) ) { print_num(); printf("\n"); return 1; } //使用过了这个数字就标记为0 visit[post] = 0; for(int i = 2;i<=n;i++) if( visit[i]!=0 && DFS(post,i,flag+1) ) break; //标记位恢复原状 visit[post] = 1; return 0;}int main(){ int count = 1; while( scanf("%d",&n)!=EOF ) { for(int i = 1; i <= n; i++) visit[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"); } return 0;}
0 0
- 搜索—Problem_1020-Prime Ring Problem
- ZOJ-1457Prime Ring Problem(搜索)
- HDOJ 1016 Prime Ring Problem 简单搜索
- hdu 1016 Prime Ring Problem dfs搜索
- 1016 Prime Ring Problem 搜索(深搜)
- Prime Ring Problem(搜索 深度优先)
- HDU 1016 Prime Ring Problem 搜索
- hdu 1016 Prime Ring Problem 搜索
- Hdu 1016 Prime Ring Problem DFS搜索
- hdu-1016 Prime Ring Problem 搜索题
- HDU1016 Prime Ring Problem 搜索入门
- 【暴力搜索】[HDU 1016]Prime Ring Problem
- HDU1016 - Prime Ring Problem (简单搜索)
- SDAU 搜索专题 20 Prime Ring Problem
- ACM 搜索 hdu1016 Prime Ring Problem
- HDU Prime Ring Problem(深度优先搜索)
- HDU(1016)搜索Prime Ring Problem
- hdoj1016 Prime Ring Problem (深度搜索)
- 修改android actionBar及标题信息相关记录!
- HTTP
- 专题二 · 1011
- (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)
- Spring报错
- 搜索—Problem_1020-Prime Ring Problem
- 随机算法-模拟退火
- python之logging模块
- 对随机数“去重”和“排序”(使用set实现)
- dict和set
- PTA 5-1 最大子列和问题 (20分)
- android在本应用中d长截图,截长图
- 图形学博客
- C#连接数据库的四种方法