第三道深搜-----------hdu1016
简单深搜。每次对第step个位置进行测试,
for(i=2;i<=n;i++)
{
if(第i个点没有被访问过,并且和为质数)
result[step]=i; //则将这个数放入step的位置
visit[i]=1; //并且对第 i 个数进行标记,以后不再访问
dfs(step+1); //对下一个点按相同规则进行访问
}
我发现,深搜可以这样理解: 以某一个点为源点按确定的规则进行搜索。如果他的下一个邻接点可行(没有被访问过,且符合规则),则记录这个点,并标记。 然后,重新以该点为新的源点进行搜索。 如果不可行,则退回到上一步,继续按规则进行所示。 直到满足结束条件。
DFS即,每次一搜到底,不行就重新回溯。找一个方向或节点,再一搜到底。不行再回溯。
代码:
#include<stdio.h>
#include<string.h>
int result[20];
bool isprime[]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0};
bool visit[20];
int n;
void dfs(int step)
{
int i;
if(step==n+1)
{
if(isprime[result[n]+1]) //如果最后一个数(第n个数)和第一个数之和是质数
{
for(i=1;i<=n;i++)
{
if(i==n) printf("%d\n",result[i]);
else
printf("%d ",result[i]);
}
}
return ;
}
for(i=2;i<=n;i++)
{
if(!visit[i]&&isprime[i+result[step-1]])
{
result[step]=i;
visit[i]=1; //访问过就进行标记
dfs(step+1);
visit[i]=0;
}
}
}
int main()
{
int count=1;
while(scanf("%d",&n)!=EOF)
{
memset(visit,0,sizeof(visit));
result[1]=1;
printf("Case %d:\n",count++);
dfs(2);
printf("\n");
}
return 0;
}
转载于:https://www.cnblogs.com/zhangyabin---acm/archive/2012/03/04/2379093.html
第三道深搜-----------hdu1016相关推荐
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...
- Poj(2488),按照字典序深搜
题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
- 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)
问题描述: 2015年05月21日 10:24:05 这是我自己出的一道题 其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧! 给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行 ...
- POJ-1724 深搜剪枝
这道题目如果数据很小的话.我们通过这个dfs就可以完成深搜: void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for ( ...
- POJ2044 深搜+剪枝(云彩下雨)
题意: 有一个城镇,是4*4的大小的,然后你控制一块云彩,2*2的,你每天可以有9种走的方法,上下左右,或者不动,走的时候可以走1或者2步,云彩所在的地方肯定会下雨,然后给你做多365天 ...
- hdu4876 深搜+(随机枚举剪枝)
题意: 给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...
- 单词拼接 ----- 深搜
先判断这些单词能不能构成 接龙 , 能的话在排序 , 然后深搜确定接龙 . 题解 : 如果先确定所有单词的首尾字母的个数 , 如果首字母个数等于尾字母个数就不用管了 , 如果发现首字母比尾字母大1那个 ...
最新文章
- pygame做的著名游戏_用python写游戏之2D跑酷游戏(一)
- 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow
- nutch开发(二)
- 计算机屏幕偏白,电脑屏幕显示泛白怎么修正
- 从Linux到Meego
- 哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。typedef enum{ HASH_OK, -icoding
- 电脑缺失MSVCP110.dll文件
- docker-compose 实战案例
- mysql导入数据提前修改字段_复习MySQL③导入数据、检查及修改
- 【算法14】找出数组中两个只出现一次的数字
- Web前端开发要掌握的技能有哪些?
- 数据库服务器操作系统升级方案,PostgreSQL 数据库跨版本升级常用方案解析
- 我的世界1.12.2java下载_我的世界1.12.2.2中文版下载 我的世界1.12.2.2中文版单机游戏下载...
- 计算快递费系统(java版)
- Request和Response的概述及其方法
- 挣值管理名词(EV、AC、PV等)与公式详解
- UE4 Gameplay框架浅析笔记
- 深入理解 Mysql 锁
- C#中接口(Interface)与抽象类(abstract)的区别
- java小项目之贪吃蛇项目(图解超详细)