hdu 1016
这是一道考搜索的题目。这道题我用深搜解决了,不过说实话自己对于深搜理解得并不深刻,在这里对于这一题总结一下。
这道题输入为一个实数n,要求输出有1~n这n个数所组成的所有素数环(这是素数环),素数环的要求是任意一个数字分别和其前后两个数字相加都要是素数,且数字1始终作为环展成条后的第一位。
深度搜索:从一个节点开始,若与它相连的节点有满足条件的点,就对该点进行搜索,否则返回到上一个节点,知道遍历了所有节点。
在这道题中,由于它要求输出所有符合条件的数字串,那么在操作过程中会遇到不符合条件的数字串,但是这些不符合条件的数字串可能在前几个数字是符合的仅是后几位数字与答案所需数字串不符合,
这里就需要用到栈这一数据结构来处理这一问题,将先前入栈后来出现问题的数字弹出栈或者将之前弹出栈而后又符合条件的数字入栈,这样就可以做到将所有可能的结果不遗漏并且排除掉了不符合条件的。
#include<stdio.h>
#include<string.h>
int t[21];
int a[21];
int k,num=1;
void search(int x,int m)
{
int i,mark=0,last=1;
if(k<m)
{
for(i=1;i<=m;i++)
{
int flag=1;
if(t[i]==0)
{
int j,y;
y=x+i;
for(j=2;j<y/2;j++)
{
if(y%j==0)
{
flag=0;
break;
}
}
if(flag)
{
k++;
a[k]=i;
t[i]=1;
search(i,m);
}
}
}
}
else
{
int j,y;
y=a[k]+1;
for(j=2;j<y/2;j++)
{
if(y%j==0)
{
t[a[k]]=0;
a[k]=0;
k--;
last=0;
break;
}
}
if(k==m)
{
for(j=1;j<=m;j++)
{
if(j==1)
printf("%d",a[j]);
else
printf(" %d",a[j]);
}
printf("\n");
}
}
if(last)
{
t[a[k]]=0;
a[k]=0;
k--;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(t,0,sizeof(t));
memset(a,0,sizeof(a));
t[1]=1;
a[1]=1;
k=1;
printf("Case %d:\n",num);
num++;
search(1,n);
printf("\n");
}
return 0;
}
hdu 1016的更多相关文章
- one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle 分类: hdoj 2015-07-19 16:49 86人阅读 评论(0) 收藏
one recursive approach to solve hdu 1016, list all permutations, solve N-Queens puzzle. reference: t ...
- HDU 1016 Prime Ring Problem(经典DFS+回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ(HDU).1016 Prime Ring Problem (DFS)
HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- Prime Ring Problem HDU - 1016 (dfs)
Prime Ring Problem HDU - 1016 A ring is compose of n circles as shown in diagram. Put natural number ...
- DFS hdu 1016
http://acm.hdu.edu.cn/showproblem.php?pid=1016 #include <iostream> using namespace std; int a[ ...
- [HDU 1016]--Prime Ring Problem(回溯)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
- HDU 1016 Prime Ring Problem(素数环问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
- hdu 1016 Prime Ring Problem (素数环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目大意:输入一个n,环从一开始到n,相邻两个数相加为素数. #include <iost ...
- HDU(1016),打素数环
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 哈哈,状态来了就是不一样,很快就A了. 注意的位置是,最后一个点,要与第一个点比较. #incl ...
- HDU 1016 素数环(dfs + 回溯)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...
随机推荐
- ubuntu14.04 64bit安装teamviewer
1.下载teamviewer,链接如下: http://downloadus2.teamviewer.com/download/version_10x/teamviewer_10.0.36281_i3 ...
- window svn链接
我学会怎么建立window SVN服务器了 今天,终于学会怎么自己搭建SVN服务了,以前一直用的都是公司的SVN服务,没接触过,觉得很神秘,曾经我一个同事弄了好几天,也没搭成,对我打击挺大的:( 觉得 ...
- Integer
import static java.lang.System.*; public class IntegerTestOne{ public static void main(String []args ...
- spring data实现自定义的repository实现类,实现跟jpa联通
如果你不想暴露那么多的方法,可以自己订制自己的Repository,还可以在自己的Repository里面添加自己使用的公共方法 当然更灵活的是自己写一个实现类,来实现自己需要的方法 1:写一个与接口 ...
- 将回车键转tab键
//功能:将回车键转tab键$(function () {$('input:text:first').focus();var $enter = $("input[type=text],but ...
- java判断时间是否是今天
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); Date d1=format.parse(FHavetime ...
- SPSS数据分析—重复测量差分析
多因素方差分析中,每个被试者仅接受一种实验处理,通过随机分配的方式抵消个体间差异所带来的误差,但是这种误差并没有被排除.而重复测量设计则是让每个被试接受所有的实验处理,这样我们就可以分离出个体差异所带 ...
- Eclipse中Java项目转换为Web项目
刚创建完的Java Project是这样的 右键项目名,找到这个地方 修改下方的 Default output folder 为 Vehicle-Report/WebContent/WEB-INF/c ...
- RabbitMq、ActiveMq、ZeroMq 和 kafka 比较
MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料.第一部分 ...
- Unix 初步(一)
1.Unix文件系统 Unix文件系统有三种文件类型:普通文件.目录文件和设备文件(将外部设备作为一种特殊的文件进行管理,实现输入输出统一而单纯的操作.) 2.Unix的网络功能 TCP/IP 3.r ...