A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.

Note: the number of first circle should always be 1. 翻译:  环是由n个圆圈组成的,如图所示。将自然数1、2、n、n分别放入每个圆中,两个相邻圆的个数之和应为素数。             注:第一圈的数目应始终为1。


Input

n (0 < n < 20).

Output

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order.

You are to write a program that completes above process.

Print a blank line after each case. 翻译:输出格式显示为下面的示例。每一行代表在环圈数从1开始顺时针和anticlockwisely系列。数字的顺序必须满足上述要求。在字典顺序打印解决方案。             您要编写一个程序,完成上述过程。             在每一种情况下打印一条空白线。

Sample Input

6
8

Sample Output

Case 1:
1 4 3 2 5 6
1 6 5 2 3 4Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
代码如下
#include <stdio.h> #include <string.h> int n,prime[50],a[50],vis[50];//a[]数组用来存储每一次适合题意的一组数据 vis[]在dfs中用来判断数字是否在之前的dfs中使用过了
void isprime() {int i,j;for(i = 2;i<50;i++)prime[i] = 1;prime[0] = prime[1] = 0;for(i = 2;i<50;i++){if(prime[i])for(j = i+i;j<50;j+=i)prime[j] = 0;//prime[x]数组中x为质数时为1,否则为0.} }
void dfs(int step)//step代表第几个环 {int i,j;if(step == n+1 && prime[a[n]+a[1]])//结束条件{for(i = 1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);return 0;}for(i = 2;i<=n;i++)//每一步dfs搜索都需要把这个节点可能的情况搜索一遍if(!vis[i] && prime[i+a[step-1]])//此数未用并且与上一个放到环中的数相加是素数{a[step] = i;vis[i] = 1;dfs(step+1);vis[i] = 0;//将vis[i]清零预备下一次搜索时判断i有没有被使用过}
}
int main() {
int cas = 1;a[1] = 1;isprime();while(scanf("%d",&n)){printf("Case %d:\n",cas++);dfs(2);printf("\n");}
return 0; }
下面是个运行时间更短的方法 很不错的程序
#include <stdio.h> int num[21],mark[21],n; int prime_num[12] = {2,3,5,7,11,13,17,19,23,29,31,37}; //判断是否是质数,是返回1,不是返回0 int is_prime(int a) { int i; for( i = 0; i < 12;i++) if(a==prime_num[i])return 1; return 0; } void print_num() {int i; for( i = 1; i < n;i++) printf("%d ",num[i]); printf("%d",num[n]); } int dfs(int post,int pre,int flag) { int i; //如果不符合,直接返回 if(!is_prime(pre+post)) return ; num[flag] = pre; if(flag==n&&is_prime(pre+1)) { print_num(); printf("\n"); } //使用过了这个数字就标记为0 mark[pre] = 0; for( i = 2;i<=n;i++) if(mark[i]!=0)dfs(pre,i,flag+1); //标记位恢复原状 mark[pre] = 1; } int main() { int count,i; count = 1; while(scanf("%d",&n)!=EOF) { for( i = 1; i <= n; i++) mark[i] = 1; num[1] = 1; printf("Case %d:\n",count++); if(n==1)printf("1\n"); for(i = 2;i<=n;i++) dfs(1,i,2); printf("\n"); } return 0; }

人生第一个深入理解的DFS题 HDU 1016相关推荐

  1. 如何让人大致理解RxJava思想:第一节 初步理解RxJava

    如何让人大致理解RxJava思想:第一节 初步理解RxJava 首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美 ...

  2. 2016年读书计划---人生第一个读书计划

    时间的脚步真是越走越快,不经意间我已经从师弟,到师兄,再到从学校滚蛋,再见了亲爱的同学,再见了亲爱的母校.就这样三年的研究生时光从手指间溜走,回顾昨天的昨天,都历历在目,怎么就毕业了呢,不禁感叹时光你 ...

  3. 毕业半年,收获人生第一个一百万,聊聊我的四年大学

    大家好,我是帅地. 双非校招拿大厂提前批 offer 在校期间从 0 到 1 摸索出一个 10 万垂直粉丝公众号 毕业半年依靠工作与副业挣到人生第一个 100 万 回过头来,帅地已经毕业一年多了,下面 ...

  4. code第一部分数组:第十七题 爬楼梯问题

    code第一部分数组:第十七题 爬楼梯问题 You are climbing a stair case. It takes n steps to reach to the top. Each time ...

  5. 奇瑞a3中控按键图解_5万元价位人生第一辆爱车如何选 奇瑞艾瑞泽5对比吉利远景...

    "To be or not to be",这是当前年轻人熟悉的话语.其实,人生总在面临这样或那样选择,很多时候难两全其美.然而,我们还了解一句成语"集大成者于一身&quo ...

  6. 记录人生第一个网站,以及相对路径图片无法显示的问题

    记录人生第一个网站,已发布GitHub 骆驼社徒步旅游网 碎碎念 上传碰到的问题 网站进化史 网站GitHub 骆驼社徒步旅游网 碎碎念 耗时大概半个多月,网页布局是仿照网上一个比较常用的模板布局来做 ...

  7. 精选文章:人生第一辆车购车八大流程及提车注意事项之最强攻略

    精选文章:人生第一辆车购车八大流程及提车注意事项之最强攻略 目录 人生第一辆车购车八大流程及提车注意事项之最强攻略 买车注意事项

  8. 2022年湖南省临床执业医师考试第一单元内医学免疫学模拟题

    本次我们将分享2022年湖南省临床执业医师考试第一单元内医学免疫学模拟题,根据近年来临床执业医师考试资格证专业知识真题,以及最新临床执业医师考试大纲,包含临床执业医师考试资格证专业知识重点题型以及知识 ...

  9. DIY组装人生第一台台式机

    DIY组装人生第一台台式机 前言: 或许每个喜欢打游戏的人都希望能有一台属于自己的主机,主机配置根据自己的需求因人而异,适合自己的满足自己需求的就是最好的,一千个人心中,就有一千个哈姆雷特. 自己需求 ...

最新文章

  1. 独家 | 一文盘点AutoML 库(附PPT等链接)
  2. 神经网络调参训练集噪音比例对网络性能的影响
  3. 【PD】PowerDesigner生成数据字典
  4. spring-cloud-eureka服务注册与发现
  5. 为什么静态成员、静态方法中不能用this和super关键字
  6. Vue v-model 指令详解以及sync修饰符的使用场景(结合父子组件通信案例)
  7. sshclientCRT连接linux使用技巧
  8. CyclicBarrier底层实现和原理
  9. iBatis in 语句参数传入方法
  10. java udp类_UDP及java中的类
  11. h3c交换机配置教程命令(新手配置交换机详细教程)
  12. vue 设置表单必填项
  13. 激荡四十年,中国企业家群画像
  14. vue3里面app.config.globalProperties的使用
  15. 怎样才能让datetime字段去掉最后面的小时、分、秒
  16. 手机5g什么时候普及_5G到底什么时候普及,明年发布的手机都会支持5G?
  17. 宾格代词-me、you_34
  18. 前缀和以及哈希表优化
  19. centos 中文乱码_StudingThinking_百度空间
  20. 皇帝成长计划html文件打不开,皇帝成长计划源代码修改(共6篇).doc

热门文章

  1. c#仿照qq登录界面编辑框内容操作
  2. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
  3. MANIFEST.MF
  4. SQL SERVER 2000数据库,转换为ACCESS数据库(已解决ACCESS自动编号问题)
  5. 通过了微软的SharePoint认证考试(70-542: Microsoft Office SharePoint Server 2007 - Application Development)...
  6. pytrhon画图matplolib
  7. 05-文件与流-课堂测试(四则运算)
  8. [原创]Nexus5 内核编译烧录过程记录
  9. 解决phpmailer可以在windows下面发送成功, 在linux下面失败的问题
  10. Java路径问题终于解决方式—可定位全部资源的相对路径寻址