hdu1016Prime Ring Problem
就是说,给你一个数n,
要你把1到n都连在一起成环。
每一个数不可反复,
且相连的两个数的和要是素数。
把全部情况输出来。
我是用dfs暴力出来的。
首先把素数打表,
然后每次顺时针预測下一个数,
由于这个数必需要是素数减去上一个数,
非常好枚举。
我的代码例如以下:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int map[30],num,prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41},used[30],save[10000][30],cnt;
void init()
{
cnt=0;
memset(used,0,sizeof(used));
used[1]=1;
map[1]=1;
}
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
bool isprime(int x)
{
int *p;
p=(int *)bsearch(&x,prime,13,sizeof(int),cmp);
if(p!=NULL)
return 1;
return 0;
}
void dfs(int i)
{
if(i==num)
{
if(isprime(map[num]+1))
{
memcpy(save[cnt],map,sizeof(save[cnt]));
cnt++;
}
return;
}
for(int j=0;j<13;j++)
{
int tmp=prime[j]-map[i];
if(tmp>num)
break;
if(tmp>1&&!used[tmp])
{
map[i+1]=tmp;
used[tmp]=1;
dfs(i+1);
used[tmp]=0;
}
}
}
int main()
{
int exp=0;
while(scanf("%d",&num)!=EOF)
{
printf("Case %d:\n",++exp);
init();
dfs(1);
for(int i=0;i<cnt;i++)
{
printf("%d",save[i][1]);
for(int j=2;j<=num;j++)
printf(" %d",save[i][j]);
printf("\n");
}
printf("\n");
}
}
hdu1016Prime Ring Problem的更多相关文章
- 素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem
/* Name: NYOJ--488--素数环 Author: shen_渊 Date: 15/04/17 15:30 Description: DFS,素数打个表,37以内就够用了 */ #incl ...
- DFS——hdu1016Prime Ring Problem
一.题目回顾 题目链接:Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagra ...
- 搜索专题: HDU1016Prime Ring Problem
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- uva 524 prime ring problem——yhx
Prime Ring Problem A ring is composed of n (even number) circles as shown in diagram. Put natural ...
- hdu 1016 Prime Ring Problem(DFS)
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 ...
- 杭电oj 1016 Prime Ring Problem
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1016 Prime Ring Problem(深度优先搜索)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU1016 Prime Ring Problem(DFS回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- Windows使用WxWidgets开发界面(c++)环境搭建
一直想学习wxWidgets,之前使用的都是wxPython,现在终于鼓起勇气学习这个了,发现原来是基于vc6.0开发的.所以最好的学习办法就是安装vistual studio 2010,方便学习看代 ...
- FineUI模拟树下拉列表
模拟树的下拉列表 很多时候,我们希望在下拉列表中显示简单树状的层次结构,在菜单设置.机构设置等场景下这个需求尤为突出.也是基于项目需求的考虑,FineUI增加了模拟树的下拉列表的功能,显示效果如下所示 ...
- winscp连接vmware ubuntu
winscp连接vmware ubuntu,因为第一次安装在虚拟机上的ubuntu是没有ssh服务的,不能在windows上通过工具进行连接,所以需要以下步骤进行ssh配置 1:检查ssh状态 ...
- js 计算两个日期之间的月数
//返回两个日期相差的月数 function MonthsBetw(date1, date2) { //用-分成数组 date1 = date1.split("-"); date2 ...
- OpenGL ES 2.0 混合
混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...
- deflate树与deflate编码
关于deflate树,能搜到的资料非常少,这个概念来自gzip的压缩算法,是由huffman树转变过来的.这里简单记录下deflate树的生成过程以及deflate编码. 假设以5 8 9 10 14 ...
- sqlite编译
1.下载代码:http://www.sqlite.org/download.html ,windows下下载sqlite-amalgamation-xxx.zip和sqlite-dll-win32-x ...
- 不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示
最近工作中需要让CTreeCtrl控件的每一项都有提示信息,于是谷歌百度,爬山涉水,结果是………….在CodeProject里找到一篇文章是把CTreeCtrl派生出新类,重载一些函数自定义内容.使用 ...
- 五种实用DOM方法总结
DOM:Document Object Model 文档对象模型 对象的三种类型:用户定义类型.内建对象.宿主对象 节点类型:元素节点.文本节点.属性节点 getElementById()方法: 将返 ...
- AutoResetEvent 类的使用说明
AutoResetEvent 类 官方描述:通知正在等待的线程已发生事件 命名空间:System.Threading 程序集:mscorlib 继承于:System.Threading.WaitHan ...