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 }
- 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 数组属性和方法
- Junit报错:Argument(s) are different! Wanted:
- RocketMQ使用过滤器filterServer(4.3版本后)
- Python+Appium运行简单的demo,你需要理解Appium运行原理!
- 网站日志分析完整实践【技术创造101训练营】
- HTML前端知识
- 掌握 AST,轻松落地关键业务「技术创作101训练营」
- 一文轻松学会linux字符设备驱动
- leetcode树之N叉树的前序遍历
- 2020-09-20:如何判断一个数是质数?
- 金九银十Android面试复习题集:关于四大组件中的Activity你了解多少?
- HaseMap的循环姿势你真的懂了吗?
- 历经14天自定义3个注解解决项目的3个Swagger难题
- VUE开发–获取DOM对象和组件对象(十九)
- RASP攻防 —— RASP安全应用与局限性浅析
- JavaScript 交换值的奇思妙想