传送门: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相关推荐

  1. SDNU 1015.最远路径

    SDNU 1015.最远路径 Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 303 Accepted Submissi ...

  2. Dijkstra+DFS模板总结

    关于Dijstra的初级运用是,在第一标尺的基础上有下面三个角度: 边权:c[maxn] = {maxn}, cost[manx][maxn] = {inf}; 点权:w[maxn] = {0}, w ...

  3. 洛谷 P1605 迷宫(DFS模板)

    题目 https://www.luogu.com.cn/problem/P1605 思路 写一个DFS模板 #include<iostream> #include<algorithm ...

  4. 搜索专题-----bfs、dfs模板,栈,队列

    P1443 马的遍历 题目描述 有一个 n×m 的棋盘,在某个点 (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步. 输入格式 输入只有一行四个整数,分别为 n,m,x,y. 输 ...

  5. hdu 1241Oil Deposits(dfs模板)

    题目链接-- http://acm.hdu.edu.cn/showproblem.php?pid=1241 首先给出一个n*m的字符矩阵,'*'表示空地,'@'表示油井.问在这个矩阵中有多少组油井区? ...

  6. 小雨的矩阵(DFS三参数模板题)

    E-小雨的矩阵 题目描述 小雨有一个n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步. 矩阵上每个点都有一个点权a(i,j). 求走到终点的路径有多少不同的点 ...

  7. 【搜索专题】DFS之连通性模型与搜索顺序

    内部搜索不用(能)回溯,外部搜索才需要(必须)回溯和恢复现场 A.AcWing 1112. 迷宫 内部搜索的一道dfs模板题,别忘了vis #include<cstdio> #includ ...

  8. LeetCode算法题7:DFS和BFS

    文章目录 前言 深度优先搜索算法伪代码: 广度优先搜索算法伪代码: 一.图像渲染 DFS: BFS: 上面BFS算法存在的问题: 修改 1: 修改 2: 二.岛屿的最大面积 DFS: BFS : 三. ...

  9. dfs题目这样去接题,秒杀leetcode题目

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

最新文章

  1. ASP .NET Core Web MVC系列教程三:添加视图
  2. HighCharts解析之xAxis——x轴的样式
  3. CC3200底板测试-烧写CC3200-LAUNCHXL
  4. (134)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构
  5. 获取路径传过来的地址 截取参数
  6. php两个字符串怎么比较,php比较两个字符串的函数strcasecmp()
  7. ActiveMQ开发配置与用例
  8. 人工智能算法:遗传算法
  9. easydarwin 安装_centos服务器安装部署搭建 EasyDarwin【步骤详解】
  10. 根据给出的关系矩阵,判断该关系所具有的特性
  11. 星际萤火|人民日报:IPFS将带来无盗版网络时代?
  12. linux系统编程实训总结,linux实训总结与体会
  13. android如何基于父布局,如何根据父视图的尺寸调整Android视图的大小
  14. 关于bootstrap--表格(table的各种样式)
  15. android studio一个好看的字体设置
  16. PID详解3(摄像头循迹分析)
  17. python dis模块解析
  18. 编译原理第三章 词法分析与有穷自动机
  19. 怎么用视频转换器把mp4转换成mp3
  20. 沃尔玛Walmart EDI解决方案之812报文解读

热门文章

  1. 2D人体骨架检测算法综述
  2. 天猫店铺转让低于市场价格能不能入手?倍赞网:符合正规条件即可入手
  3. ADC和VCC/VDD/VSS/VEE/VBAT/VREF、SPI
  4. 北京信息科技大学计算机专业是几本,北京信息科技大学是几本?是985和211吗?
  5. python简易发红包_Python简易发红包问题
  6. 如何学习数据结构和算法
  7. Apollo:源码分析之cyber\blocker\blocker.h
  8. Ali-Check 【Blocker】
  9. 仿牛客社区项目4.5——Redis实现关注、取消关注(zset)
  10. 将普通函数当中的arguments(类数组转换为数组以及类数组调用数组方法)