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, ...
随机推荐
- C#类遍历
foreach语句的基本用法大家都应该知道,就是对对象进行遍历,取出相应的属性名称或属性值.Foreach(for)用法在js中使用很简单,基本如下: var objA={name:'mayday', ...
- vim 简单配置
在启动vim时,当前用户根目录下的.vimrc 文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把.vimrc 文件创建在当前用户的根目录下比较方便,即:$vi ~/.vimrc,然 ...
- Instuments工具
最近一直在研究IOS在多语言环境下的自动化测试,其中一个重大的问题就是如何在自动化测试的时候能够自动切换语言, 比如某个软件支持10个国家的语言,如果不能自动的切换语言,那么在测试的过程中就需要手动切 ...
- 函数指针与指针函数以及typedef
c难于理解的是指针,其魅力之处也是指针,函数方法结构,化繁为简可以理解为:返回值 函数名(形参表),具体来说: 返回值:1.可以为空void 2.基本数据类型char short int long f ...
- c c++怎么判断一个字符串中是否含有汉字
c c++怎么判断一个字符串中是否含有汉字 (2013-02-05 10:44:23) 转载▼ #include #include int main() { char sztext[] = ...
- postgresql - 服务配置
1.查看配置的修改是否需要重启数据库 select name,context from pg_settings where name like 'wal_buffers'; 如果context的值是p ...
- DIV设置overflow无效的原因
因为项目需求需要在一个div中添加多个checked 添加的时候使用了 <label><input type="checkbox" value="123 ...
- 二分图最大权最小权完美匹配模板KM
在网上找了一份挺好的模板,先标一下哦~链接君:http://blog.csdn.net/abcjennifer/article/details/5844579 #include <iostrea ...
- CTSC2015 酱油记
终于又到写酱油记的时间了...不过开心不起来诶.. Day 0 晚上睡不着觉也不造为啥... 起来看了一本亚里亚小说,继续睡,睡不着... 又起来看了一本亚里亚小说,继续睡,睡不着... 然后...死 ...
- WCF事务应用[转]
在B2B的项目中,一般用户注册后,就有一个属于自己的店铺,此时,我们就要插入两张表, User和Shop表. 当然,要么插入成功,要么全失败. 第一步: 首先看一下项目的结构图: 第二步: 准备工作, ...