DFS:Prime Ring Problem(素数环)
解体心得:
1、一个回溯法,可以参考八皇后问题。
2、题目要求按照字典序输出,其实在按照回溯法得到的答案是很正常的字典序。不用去特意排序。
3、输出有个坑,就是在输出一串的最后不能有空格,不然要PE,很尴尬。
题目:
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 3 8 5 2
Source
Asia 1993 8 5 2
Source
Asia 19 Shanghai (Mainland China)
#include<stdio.h>
#include<cstring>
int n,num[21],sum,l,sum1;
bool prim[50];
bool bnum[21];
int circle[21];
int z = 1;
void dfs(int sum)
{
if(sum == n)
{
if(!prim[circle[1]+circle[sum]])//判断第一个和最后一个相加是否是素数
return;
for(int j=1;j<=n;j++)
{
if(j!=n)
printf("%d ",circle[j]);//最后一个数字后面不可以加空格,不然要PE,很尴尬;
else
printf("%d",circle[j]);
}
printf("\n");
return;
}
for(int i=2;i<=n;i++)
{
if(!bnum[i])
continue;
if(prim[i+circle[sum]])
{
circle[sum+1] = i;
bnum[i] = false;
dfs(sum + 1);
bnum[i] = true;
}
}
return;
}
int main()
{
//先把50以内的素数手写出来
memset(prim,false,sizeof(prim));
prim[2] = true;
prim[3] = true;
prim[5] = true;
prim[7] = true;
prim[11] = true;
prim[13] = true;
prim[17] = true;
prim[19] = true;
prim[23] = true;
prim[29] = true;
prim[31] = true;
prim[37] = true;
prim[41] = true;
prim[43] = true;
prim[47] = true;
while(scanf("%d",&n)!=EOF)
{
//特判几个很大但是没有任何结果的数,直接输出,节省时间
if(n == 19 || n == 15 || n == 11 || n == 17 || n == 13)
{
printf("Case %d:\n",z++);
printf("\n");
continue;
}
printf("Case %d:\n",z++);
sum1 = 0;
l = 1;
sum = 1;
memset(circle,0,sizeof(circle));
memset(bnum,true,sizeof(bnum));
bnum[1] = false;
circle[1]=1;
dfs(1);
printf("\n");
}
}
DFS:Prime Ring Problem(素数环)的更多相关文章
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 题目1459:Prime ring problem(素数环问题——递归算法)
题目链接:http://ac.jobdu.com/problem.php?pid=1459 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- HDOJ 1016 Prime Ring Problem素数环【深搜】
Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, -, ...
- Prime is problem - 素数环问题
题目描述: A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each ...
- hdu1016 Prime Ring Problem【素数环问题(经典dfs)】
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black
Prime Ring Problem Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- HDU 1016 Prime Ring Problem(素数环问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
- UVA - 524 Prime Ring Problem(dfs回溯法)
UVA - 524 Prime Ring Problem Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & % ...
- Hdu1016 Prime Ring Problem(DFS) 2016-05-06 14:27 329人阅读 评论(0) 收藏
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1016 Prime Ring Problem(dfs)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- SpringBoot | 第十五章:基于Postman的RESTful接口测试
前言 从上一章节开始,接下来的几个章节会讲解一些开发过程中配套工具的使用.俗话说的好,工欲善其事,必先利其器.对于开发人员而言,有个好用的工具,也是一件事半功倍的事,而且开发起来也很爽,效率也会提升很 ...
- notepad++上配置ruby执行环境
1.安装NppExec 插件 2.按快捷键F6,在弹出框中输入如下命令: npp_save cd "$(CURRENT_DIRECTORY)" jruby "$(FI ...
- C#中接口的深入浅出【转】
C#中接口的深入浅出 假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示:Delphi程序员指的是用Delphi写程序的程序员,用clsDelp ...
- SpringMVC03 ParameterMethodNameResolver(参数方法名称解析器) And XmlViewResolver(视图解析器)
参数方法名称解析器 1.配置依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- jquery jquery中是否加()的问题
自己总结的,慢慢修改再: 1带上()代表立即执行 去掉()代表当有事件发生的时候,我再执行
- MATLAB之易经卜卦程序+GUI
MATLAB之易经卜卦程序+GUI 日月为易,刚柔相推. 是故易有太极,是生两仪,两仪生四象,四象生八卦,八卦定吉凶,吉凶生大业.是故法象莫大乎天地,变通莫大乎四时,悬象著明莫大乎日月. 本文 ...
- Python开发环境Wing IDE如何进行命令行调试
Wing IDE专业的调试探针提供了一种强大的方法来发现和解决复杂的错误.这很像Python Shell但允许用户直接参与进已经暂停的调试程序中: 通过键入在刚才发生异常的地方键入下列数值进行尝试: ...
- Google pieCharts的学习
在公司项目开发过程中, 尤其是在网站的开发过程中,用到很多的前端的插件,在这里, 我简单介绍下近期Google pieCharts的是使用方法 https://developers.google.co ...
- Js面向对象之观察者模式
//模拟一个目标可能拥有的一些列依赖 function ObserverList() { this.observerList = []; }; //添加一个观察者 ObserverList.proto ...
- hdu-2680 Choose the best route---dijkstra+反向存图或者建立超级源点
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路 解题思路: 1.自己多加一个超级 ...