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, ...
随机推荐
- loadrunner录制脚本方式笔记
1.脚本录制的基本原则 充分考虑脚本的执行效率 性能测试脚本关注的是如何模拟用户的真实行为.因此,用于测试的脚本应该接近用户的真正操作.这就要求录制后 的脚本在修改的过程中不要增加过多 ...
- indexOf属性不支持
//此方法是数组的indexof属性不支持特此增加此段代码 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt ...
- My97日期控件 选择日期区间
<script language="javascript" type="text/javascript" src="My97DatePicker ...
- iOS 键盘
http://blog.sina.com.cn/s/blog_7018d3820101djut.html 一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboa ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- Android之alertDialog、ProgressDialog
一.alertDialog 置顶于所有控件之上的,可以屏蔽其他控件的交互能力.通过AlertDialog.Builder创建一个AlertDialog,并通过setTittle(),setMesseg ...
- Software Engineering: 2. Project management
resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...
- 0060 Linux SELinux 管理命令
1. SELinux 的起源 SELinux 是一个面向政府和行业的产品,由 NSA.Network Associates.Tresys 以及其他组织设计和开发.尽管 NSA 将其作为一个补丁集引入, ...
- python新技能get——看!源!码!
上节课一起看了一下ThreadingTCPserver和tornado的源码,真是心力交瘁...后来仔细的想了一下,看懂源码其实并不难,只是需要明确一些以前我们学习过但是却容易被忽视的概念! 再看继承 ...
- 6/12 Sprint2 看板和燃尽图