DFS模板 SDNU 1015
传送门:SDNUOJ 1015
一道非常清晰的搜索题
先上AC码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=108;
struct node{int w,l,r;//w=到父节点距离//l=左子节点编号//r=右子节点编号
}no[N];
int ans=-1;//最长路径长度
void dfs(int ls,int rs,int sum,int cur)
{sum+=no[cur].w;ans=max(sum,ans);if(ls) dfs(no[ls].l,no[ls].r,sum,ls);if(rs) dfs(no[rs].l,no[rs].r,sum,rs);
}
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>no[i].w>>no[i].l>>no[i].r;}dfs(no[1].l,no[1].r,0,1);cout<<ans<<endl;return 0;
}
现在知道的有:
①这个二叉树每个节点的编号
②每个节点到其父节点的距离
(可看成权,根节点的权是0)
③每个节点的两个子节点的编号
(如果都是0就代表它是叶节点)
这样就允许我们找到这个二叉树的每一根枝,也就是遍历每一条可能走的路径
不过首先,按照要求,先输入
int n;
cin>>n;
for(int i=1;i<=n;i++)
{cin>>no[i].w>>no[i].l>>no[i].r;
}
下面看DFS函数部分,实际上它本身很短
void dfs(int ls,int rs,int sum,int cur)
{sum+=no[cur].w;ans=max(sum,ans);if(ls) dfs(no[ls].l,no[ls].r,sum,ls);if(rs) dfs(no[rs].l,no[rs].r,sum,rs);
}
这里的具体思路是
从根开始往下找,每次先找左子节点,然后把它的权(距离)加到路径总长度里,也就是:
sum+=no[cur].w;
走到头了之后就停止,然后嵌套的DFS函数逐层结束,结束到有右子节点的节点为止,然后进入这个右子节点,在以之为根的子树里继续按照上述思路进行遍历,写出来就两行:
if(ls) dfs(no[ls].l,no[ls].r,sum,ls);
if(rs) dfs(no[rs].l,no[rs].r,sum,rs);
这样下来就可以走遍所有可能的路了
但是光走遍所有的路是不够的,我们需要求的是最长路径的长度
所以定义了一个ans,用来对每次路径的长度sum取最大值:
ans=max(sum,ans);
最后,主函数里需要做的就只是利用DFS函数进行搜索然后输出了
dfs(no[1].l,no[1].r,0,1);
cout<<ans<<endl;
return 0;
DFS模板 SDNU 1015相关推荐
- SDNU 1015.最远路径
SDNU 1015.最远路径 Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 303 Accepted Submissi ...
- Dijkstra+DFS模板总结
关于Dijstra的初级运用是,在第一标尺的基础上有下面三个角度: 边权:c[maxn] = {maxn}, cost[manx][maxn] = {inf}; 点权:w[maxn] = {0}, w ...
- 洛谷 P1605 迷宫(DFS模板)
题目 https://www.luogu.com.cn/problem/P1605 思路 写一个DFS模板 #include<iostream> #include<algorithm ...
- 搜索专题-----bfs、dfs模板,栈,队列
P1443 马的遍历 题目描述 有一个 n×m 的棋盘,在某个点 (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步. 输入格式 输入只有一行四个整数,分别为 n,m,x,y. 输 ...
- hdu 1241Oil Deposits(dfs模板)
题目链接-- http://acm.hdu.edu.cn/showproblem.php?pid=1241 首先给出一个n*m的字符矩阵,'*'表示空地,'@'表示油井.问在这个矩阵中有多少组油井区? ...
- 小雨的矩阵(DFS三参数模板题)
E-小雨的矩阵 题目描述 小雨有一个n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步. 矩阵上每个点都有一个点权a(i,j). 求走到终点的路径有多少不同的点 ...
- 【搜索专题】DFS之连通性模型与搜索顺序
内部搜索不用(能)回溯,外部搜索才需要(必须)回溯和恢复现场 A.AcWing 1112. 迷宫 内部搜索的一道dfs模板题,别忘了vis #include<cstdio> #includ ...
- LeetCode算法题7:DFS和BFS
文章目录 前言 深度优先搜索算法伪代码: 广度优先搜索算法伪代码: 一.图像渲染 DFS: BFS: 上面BFS算法存在的问题: 修改 1: 修改 2: 二.岛屿的最大面积 DFS: BFS : 三. ...
- dfs题目这样去接题,秒杀leetcode题目
点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...
最新文章
- ASP .NET Core Web MVC系列教程三:添加视图
- HighCharts解析之xAxis——x轴的样式
- CC3200底板测试-烧写CC3200-LAUNCHXL
- (134)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构
- 获取路径传过来的地址 截取参数
- php两个字符串怎么比较,php比较两个字符串的函数strcasecmp()
- ActiveMQ开发配置与用例
- 人工智能算法:遗传算法
- easydarwin 安装_centos服务器安装部署搭建 EasyDarwin【步骤详解】
- 根据给出的关系矩阵,判断该关系所具有的特性
- 星际萤火|人民日报:IPFS将带来无盗版网络时代?
- linux系统编程实训总结,linux实训总结与体会
- android如何基于父布局,如何根据父视图的尺寸调整Android视图的大小
- 关于bootstrap--表格(table的各种样式)
- android studio一个好看的字体设置
- PID详解3(摄像头循迹分析)
- python dis模块解析
- 编译原理第三章 词法分析与有穷自动机
- 怎么用视频转换器把mp4转换成mp3
- 沃尔玛Walmart EDI解决方案之812报文解读
热门文章
- 2D人体骨架检测算法综述
- 天猫店铺转让低于市场价格能不能入手?倍赞网:符合正规条件即可入手
- ADC和VCC/VDD/VSS/VEE/VBAT/VREF、SPI
- 北京信息科技大学计算机专业是几本,北京信息科技大学是几本?是985和211吗?
- python简易发红包_Python简易发红包问题
- 如何学习数据结构和算法
- Apollo:源码分析之cyber\blocker\blocker.h
- Ali-Check 【Blocker】
- 仿牛客社区项目4.5——Redis实现关注、取消关注(zset)
- 将普通函数当中的arguments(类数组转换为数组以及类数组调用数组方法)