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 ...
随机推荐
- 判断两个IP地址是不是属于同一子网的方法
一个IP地址有三种写法: 第一种,单个IP,如192.168.55.28 第二种,IP/子网掩码,如192.168.55.28/255.255.255.0 第三种,IP/子网掩码长度,如192.168 ...
- UICollectionView笔记1
WWDC 2012 Session笔记——205 Introducing Collection Views 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ...
- Mongodb简介及基本操作
一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性 ...
- 零基础逆向工程29_Win32_03_ESP寻址_定位回调函数_子窗口_消息处理函数
1 Win32应用程序入口识别 思路:根据WinMain的四个参数,由调用顺序,知道最后压栈的是hInstance句柄(也就是WinMain函数的第一个参数,其值等于ImageBase),根据反汇编, ...
- Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. 先谈一下基本的实现原理,这种桌面悬浮窗的效果很 ...
- Hibernate数据库的操作
参考网址: https://www.cnblogs.com/jack1995/p/6952704.html 1.最简单的查询 List<Special> specials = (List& ...
- WebUploader实现采集图片的功能
项目最开始用百度团队的文件上传组件做了个物料照片采集的功能,后来做员工头像采集时竟然不知道怎么使用了. 参照官方Demo: http://fex.baidu.com/webuploader/getti ...
- String和string
String和string的区别 从位置讲: 1.String是.NET Framework里面的String,小写的string是C#语言中的string 2.如果把using ...
- vue-绑定style、css
class.style的绑定1.在 v-bind 用于 class 和 style 时, Vue.js 专门增强了它.表达式的结果类型除了字符串之外,还可以是对象或数组2.绑定css2.1对象绑定2. ...
- UVA 340 Master-Mind Hints 猜密码游戏(水)
题意: 给一串密码(第一行),接着再给你很多行猜测,针对每行猜测,输出两个数字,分表代表:同一列上匹配的个数,不同列上匹配的个数.注:匹配指的是一次,一旦配对,不能再与其他配对. 思路: 每接受一行猜 ...