HDUOJ----(1016)Prime Ring Problem
Prime Ring Problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21151 Accepted Submission(s): 9465
Problem Description
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.
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.
Sample Input
6 8
Sample Output
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 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
Source
Asia 1996, Shanghai (Mainland China)
深度搜索....无压力;;
代码:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 int str[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
5 int ans[21]={1};
6 int n,cnt; /*代表搜索的深度*/
7 bool flag;
8 /*可能需要剪枝*/
9 void dfs(int step)
10 {
11 int i,j,temp;
12 if(step==n) /*说明搜索到底了!*/
13 {
14 flag=true;
15 temp=ans[0]+ans[n-1]; //开头和结尾也要判断
16 for(j=2;j*j<=temp;j++)
17 {
18 if(temp%j==0)
19 {
20 flag=false;
21 break;
22 }
23 }
24 if(flag)
25 {
26 printf("%d",ans[0]);
27 for( i=1;i<n;i++)
28 {
29 printf(" %d",ans[i]);
30 }
31 puts("");
32 }
33 }
34 else
35 {
36 for(i=1;i<n;i++)
37 {
38 if(str[i])
39 {
40 flag=true;
41 temp=ans[cnt-1]+str[i];
42 for(j=2;j*j<=temp;j++)
43 {
44 if(temp%j==0)
45 {
46 flag=false;
47 break;
48 }
49 }
50 if(flag)
51 {
52 ans[cnt++]=str[i];
53 str[i]=0;
54 dfs(step+1);
55 str[i]=ans[--cnt];
56 ans[cnt]=0;
57 }
58 }
59 }
60 }
61 }
62
63 int main()
64 {
65 int count=1;
66 while(scanf("%d",&n)!=EOF)
67 {
68 cnt=1;
69 printf("Case %d:n",count++);
70 dfs(1);
71 puts("");
72 }
73 return 0;
74 }
- Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】
- React Native组件(四)TextInput组件解析
- struts2实现ajax校验的2种方法
- 单例对象
- Android+struts2+json方式模拟手机登录功能
- iOS 获取通讯录里边的电话号码AddressBook
- InvocationTargetException异常解析
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】
- java基础多线程之共享数据
- Spring Boot自动化配置的利弊及解决之道
- Java四种引用解析以及在Android的应用
- java基础之泛型
- java基础之反射
- 第四章 正则表达式回溯法原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django-rest-framework中过滤器的定制实例
- Python greenlet和gevent使用代码示例解析
- 完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
- Android开发中Intent.Action各种常见的作用汇总
- Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
- Android添加ButterKnife时报错Error:(2, 0) Cannot add extension with name 'android'的解决办法
- Python视频编辑库MoviePy的使用
- python json.dumps中文乱码问题解决
- Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
- Android开发导入项目报错Ignoring InnerClasses attribute for an anonymous inner class的解决办法
- Android中buildToolVersion与CompileSdkVersion的区别
- Glide用法与技巧以及优秀库的推荐
- Android整理好的图片压缩工具类
- Android Studio获取网络JSON数据并处理的方法
- Android使用ViewPager快速切换Fragment时卡顿的优化方案