DFS(排列数字、飞机降落、选数、自然数的拆分)

注:1.首先要知道退出条件

        2.还原现场

 典型:全排列

题目1:

代码:

#include<bits/stdc++.h>
using namespace std;
int a[1005],p[1005],v[1005];
int n;
void dfs(int x)
{//此次dfs结束条件,即搜到底 if(x==n+1){for(int i=1;i<=n;i++)cout<<p[i]<<" "; cout<<endl;return ;}for(int i=1;i<=n;i++){if(!v[a[i]])//若该数字未访问 {p[x]=a[i];//记录该数字v[a[i]]=1;dfs(x+1);//搜索下一个位置 v[a[i]]=0; //上面搜索完之后,回溯 }}
}
int main()
{cin>>n;for(int i=1;i<=n;i++)a[i]=i;dfs(1);return 0;} 

题目2:P9241 [蓝桥杯 2023 省 B] 飞机降落 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码(含解析): 

#include<bits/stdc++.h>
using namespace std;
int n;
int t[15],d[15],l[15],v[15];
int flag;//标记该是否有满足条件的降落顺序 
void dfs(int preTime,int x)//preTime用于记录上一架飞机降落完毕的时间,x用于记录当前降落飞机数量 
{if(x==n+1)//此时所有飞机降落完成,退出 {flag=1;return;}for(int i=1;i<=n;i++) {if(v[i]==0&&preTime<=t[i]+d[i])//若当前飞机还未访问且当前飞机油未耗尽,当前飞机可为下一个降落的飞机 {v[i]=1;//已访问 dfs(max(t[i],preTime)+l[i],x+1);//访问这轮dfs的下一个节点 v[i]=0;//还原现场 }}
}
int main()
{int T;cin>>T;while(T--){flag=0; cin>>n;for(int i=1;i<=n;i++)cin>>t[i]>>d[i]>>l[i];dfs(0,1);//可理解为上一架飞机降落时间为0,此时寻找第一架降落飞机 if(flag==1)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;
}

题目3:P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码(含解析):

#include<bits/stdc++.h>
using namespace std;
int a[25],v[25];
int n,k;
int ans;
bool isPrime(int x)//判断是否为素数 
{if(x<=3)return x>1;for(int i=2;i<=sqrt(x);i++){if(x%i==0)return false;}return true;
}
//cnt代表选了多少个数,sum为cnt个数的和,st代表从哪个数开始 
void dfs(int cnt,int sum,int st)
{if(cnt==k+1)//若已经选完了k个数(sum为K个数的和) {if(isPrime(sum))ans++;}for(int i=st;i<=n;i++){if(v[i]==0){v[i]=1;dfs(cnt+1,sum+a[i],i+1);v[i]=0;}}
}
int main()
{cin>>n>>k;for(int i=1;i<=n;i++)cin>>a[i];dfs(1,0,1);cout<<ans;return 0;} 

题目4: P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int p[1000];
//sum记录当前数的和,cnt代表当前要找第cnt个数,st代表当前从几开始加 
void dfs(int sum,int cnt,int st)
{if(sum>n) return;//退出条件 if(sum==n) {// cnt代表当前找的数的个数,当前找到的为cnt-1个数 for(int i=1;i<=cnt-2;i++)cout<<p[i]<<"+";cout<<p[cnt-1]<<endl;return;}for(int i=st;i<=n-1;i++){p[cnt]=i;//记录路径 dfs(sum+i,cnt+1,i);} 
}
int main()
{cin>>n;dfs(0,1,1);return 0;} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/595941.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【踩坑日记】因不同系统换行符不同导致的文本读取结果不同的问题

文章目录 1 问题现象描述2 解决过程&#xff08;点击直接跳到解决方法&#xff09;3 原因解释4 如何避免踩坑4.1 格式转换4.2 格式查看 1 问题现象描述 起因是群友问了这么一个问题 确实很奇怪&#xff0c;按理说第二个printf不会完全不输出&#xff0c;于是想到&#xff0c;…

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示&#xff1a; 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态&#xff0c;而是进入TIME_WAIT状态&#xff0c;一般等2MLS后进入关闭状态。 原因&#xff1a; 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

递归|全排列

全排列一 题目描述 算法原理 我们先把决策树画出来&#xff0c;根据决策树写代码&#xff0c;然后设计函数头 dfs函数用途就是从nums数组选数填入横线 就是有三个位置&#xff0c;我们把1 2 3填进这三个位置&#xff0c;而且保证不重复。 比如我们第一冷选了1之后第二轮就不…

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

【学习分享】小白写算法之选择排序篇

【学习分享】小白写算法之选择排序篇 前言一、什么是选择排序算法二、选择排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 简单排序有三种&#xff0c;冒泡排序&#xff0c;插入排序和选择排序。这三种排序的算法算是入门级别的&#xff0c;打好…

联想 Y9000P 连接网线速度慢 的 问题解决

参考帖子&#xff1a;求助&#xff0c;拯救者Y9000P 2022 i73060版本 有线网非常慢 无线网正常【笔记本吧】_百度贴吧 问题原因&#xff1a; 网卡驱动版本不对。不能用Win11版&#xff0c;要用Win10版。 问题解决&#xff1a; 1、卸载原驱动 2、下载Win10 驱动 并安装 下载…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

SpringBoot+ECharts+Html 字符云/词云案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_comment表&#xff0c;表中设置两个字段word与count&#xff0c;添加表中的数据。如&#xff1a;附件中的 echartsdb.sql 3. SpringBoot…

如何选择和注册域名,域名有什么作用,什么是域名解析?域名的需要多少钱?

大家好欢迎来到易极赞&#xff0c;今天我们来跟大家聊一下“如何选择和注册域名”这个话题。 域名用来做什么&#xff1f; 域名对您的网站至关重要&#xff0c;因为它代表您的品牌名称并充当网站的地址。对于企业主来说&#xff0c;一个令人难忘的域名有助于建立在线形象和客户…

使用神经网络-遗传算法优化神经网络-风电预测故障(BP,GABP,matlab)

本项目是故障预测&#xff0c;不是时序预测&#xff0c;本质还是分类问题 1 数据集介绍 特征文件&#xff1a; 标签文件&#xff1a;共计4个标签&#xff0c;其中大多数都是正常的&#xff0c;其他是3个不正常的类别 2 使用BP网络 2.1 读取数据&#xff0c;然后选择几个…

git可视化工具

Gitkraken GitKraken 是一款专门用于管理和协作Git仓库的图形化界面工具。它拥有友好直观的界面&#xff0c;使得Git的操作变得更加简单易用&#xff0c;尤其适合那些不熟悉Git命令行的开发者。GitKraken提供了丰富的功能&#xff0c;如代码审查、分支管理、仓库克隆、提交、推…

【精品教程】护网HVV实战教程资料合集(持续更新,共20节)

以下是资料目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a; 01-HW介绍.zip 02-HTTP&Burp课程资料.zip 03-信息收集_3.zip 04-SQL注入漏洞_2.zip 05-命令执行漏洞.zip 06-XSS漏洞.zip 07-CSRF.zip 08-中间件漏洞.zip 09-SSRF.zip 10-XXE.zip 11-Java反序列…