首页 > 其他分享 >深度优先搜索

深度优先搜索

时间:2024-03-25 22:29:33浏览次数:12  
标签:优先 19 int 素数 搜索 深度

         上一期介绍了广度优先搜索,这一期介绍另一种搜索算法,深度优先搜索。

        按照它们俩的理念来说,广度优先就是尽可能的多做尝试,比如要你在迷宫中找到目标点,我们就需要看遍四周的路看看那个可以走通,能走通就加入备选队列中,然后不断从队列中取坐标点继续重复上述操作直到找到目标或者无路可走,按照广度优先搜索的特性,它适合用来求最短路问题,或者是求某个操作的最小值。

        深度优先搜索呢,使用它的主要目的就是“一条路走到黑”,比如在上一段描述的迷宫问题中,深度优先搜索就是找到一个可以走的格子就直接去到那个格子,然后继续看有哪个格子可以走继续走,直到无路可走或者到达终点,此时返回上一个节点。总结一下,深度优先搜索像一个不撞南墙不回头的人,遇到能走的路就走,直到不能走在倒回去,按照这个特性,我们需要标记走过的路,不然当遇到不能走的路时程序就成为死循环了。依照这个特点,深度优先搜索适合求解那种要求多种方案的问题,因为我们会尽可能地将每一种方案都试一遍。

        下面来看一道深度优先搜索的问题:

一看题目要求我们输出一共多少种方案,果断选择一手深度搜索,利用简单递归就可以实现题目

需要注意的是判断素数的时候计数器i枚举到i*i>=sum的时候就该停了,可以节省一部分运行时间

具体思路可以看下面代码及注释

已知 n 个整数 x1,x2,⋯ ,xn以及 1个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,44 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:

3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=293+7+19=29。

#include<iostream>
#include<cstring>
using namespace std;
#define N 30
int nums[N],ans,n,k;
bool iss(int sum)//判断是否是素数
{
    int i;
    for(i=2;i*i<sum;i++)
    {
        if(sum%i==0)
            break;
    }
    if(i*i<sum)
        return false;
    return true;
}
void dfs(int i,int cnt,int sum)//i表示此时是第几个数
                                //cnt记录一共加了几个数,sum表示总和
{
    if(cnt==k)//加到k个数了,判断一手
    {
        if(iss(sum))
            ans++;
        return ;
    }
    for(int j=i;j<n;j++)//
    {
        dfs(j+1,cnt+1,sum+nums[j]);//每次从下标为i的数开始累计,避免重复
    }
    return ;
}
int main()
{
    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
        cin>>nums[i];
    }
    dfs(0,0,0);
    cout<<ans;
    return 0;
}

标签:优先,19,int,素数,搜索,深度
From: https://blog.csdn.net/weixin_74141526/article/details/137024618

相关文章

  • 【Flink】Flink如何覆盖系统类、优先加载用户类、child-first使用技巧
    1.概述一个问题,关于类加载的,就是我使用了flink-sql-connector-kafka的依赖,但是我改了这个类,和任务在一个jar包里面,flink-sql-connector-kafka.jar和Flink的lib中的jar在hdfs上,Flinkonyarn的方式提交作业,但是我改的这个类不生效(还是用的flink-sql-connector-kafka里面的......
  • 搜索的技巧VS选股
    今天在补充论文的文献部分,发现只有作者和年份如李晨(2003),本以为利用这两个数据查找引用的文献会很麻烦,没想到在百度学术上直接搜索李晨(2003)就出来了对应的文章。令我没想到的是,我本以为百度学术上搜索会和百度搜索与一样搜出一大堆无关的东西,或者叫李晨的写的文章很多,给我搜出......
  • 测试优先编程思想
    Test-FirstProgramming什么是软件测试?Theprocessofcheckingthequality,functionality,andperfomanceofasofwareproductbeforelaunching.1Theactofexamingtheartifactsandthebehaviorofthesoftwareundertestbyvertificationandvalidat......
  • 第13篇:4线-2线优先编码器
    Q:上一篇我们实现的4线-2线普通编码器在实际应用中会存在一个问题:如果中有2个或2个以上的取值同时为1,输出编码会出现混乱。本篇我们再来学习设计4线-2线优先编码器解决这个问题。A:基本原理:规定操作先后顺序,即优先级别。4个输入的优先级别的高低次序依次为、、、。优先编码器允......
  • 最全面的C语言的运算符优先级
    C语言是一种广泛应用于系统编程和应用程序开发的高级编程语言。在C语言中,运算符优先级是非常重要的概念,它决定了表达式中各个运算符的执行顺序。本文将详细介绍C语言中各种运算符的优先级,帮助读者更好地理解和使用这些运算符。首先,我们需要了解C语言中运算符的分类。C语言......
  • 按键精灵-搜索给定区域内最后一个符合颜色值的坐标
    Functionget_lastPoint_coordinate_v2(left_x,left_y,right_x,right_y,color_value)//搜索给定区域的最后一个符合color_value颜色值的坐标,若是不存在,就返回-1,-1Dimresult_x,result_yresult_x=-1result_y=-1//若是给定的区域是反向区域......
  • 深度学习 - PyTorch基本流程 (代码)
    直接上代码importtorchimportmatplotlib.pyplotaspltfromtorchimportnn#创建dataprint("****CreateData****")weight=0.3bias=0.9X=torch.arange(0,1,0.01).unsqueeze(dim=1)y=weight*X+biasprint(f"NumberofXsamples:{len......
  • 深度学习(18)--注意力机制详解
    目录一.什么是注意力机制(AttentionMechanism)二.什么是注意力(Attention)三.自注意力机制(Self-AttentionMechanism)3.1.对输入数据进行Embedding操作3.2.q,k操作3.3.v操作 3.4.代码实现四.多头自注意力机制(Multi-headSelf-AttentionMachanism) 4.1.q,k操作4.2.v......
  • Flink 架构深度解析
    Flink是一个开源的流处理框架,用于处理和分析实时数据流。它以其高吞吐量、低延迟和强大的状态管理能力而闻名。本文将深入探讨Flink的架构设计,帮助读者理解其内部工作原理。1.引言在当今的数据驱动世界中,实时数据处理变得越来越重要。Flink提供了一个高性能、可扩展的平......
  • 二叉搜索树 BST 、平衡二叉查找树 AVL 、红黑树
    看的是LeetCode一位博主的总结,码住,写得不错。二叉查找树AVL树在插入删除操作时对经过的路经节点进行递归平衡(balance方法,核心是判断左右子树之间的树高关系,然后调用对应的单/双旋转方法)。其他部分其实和BST差不多一样的。红黑树......