当前位置: 首页 > article >正文

【算法思考记录】力扣2477. 到达首都的最少油耗【JavaScript,深度优先搜索】

原题链接

到达首都的最少油耗:一种优雅的解决方案

题目解析

这个算法题目描述了一个有趣的场景:一棵由城市和道路组成的树形结构,其中每个节点代表一个城市,边代表道路。所有城市的代表需要前往编号为0的城市——首都参加会议。任务是计算代表们到达首都所需的最小油耗,假设每座城市只有一辆车,且每辆车的座位数相同。

输入说明

  • roads: 一个二维数组,表示城市间的双向道路。
  • seats: 整数,表示每辆车的座位数。

输出说明

  • 返回一个整数,表示最小的油耗总量。

题解思路

这个问题可以转化为遍历树的问题。对于树中的每一个非首都节点,计算它的子树中有多少个节点,并将这个数除以座位数向上取整,得到的就是从该节点到首都所需的最少油耗。最后,将所有这些油耗相加即可。

JavaScript 代码实现

var minimumFuelCost = function (roads, seats) {
    const graph = Array(roads.length + 1).fill(null).map(() => []);
    for (const [x, y] of roads) {
        graph[x].push(y); // 记录每个点的邻居
        graph[y].push(x);
    }

    let ans = 0;
    function dfs(x, fa) {
        let size = 1;
        for (const y of graph[x]) {
            if (y !== fa) { // 递归子节点,不能递归父节点
                size += dfs(y, x); // 统计子树大小
            }
        }
        if (x !== 0) { // x 不是根节点
            ans += ((size - 1) / seats | 0) + 1;
        }
        return size;
    }
    dfs(0, -1);
    return ans;
};

解释

  1. 创建一个图 g,存储每个城市的相邻城市。
  2. 使用深度优先搜索(DFS)遍历树,计算每个子树的大小。
  3. 对于每个子树,将其大小除以座位数并向上取整,得到的结果加到总油耗 ans
  4. 返回总油耗。

结论

这个题解提供了一个高效且清晰的方法来解决“到达首都的最少油耗”问题,展示了如何利用树的结构和深度优先搜索算法来优雅地解决实际问题。



http://www.kler.cn/a/159276.html

相关文章:

  • 高级数据结构——hash表与布隆过滤器
  • 从零开始学习 sg200x 多核开发之 uboot 网络功能使能
  • T265相机双目鱼眼+imu联合标定(全记录)
  • 11.08-10.14谷粒商城
  • cache中setID和index
  • 【因果分析方法】MATLAB计算Liang-Kleeman信息流
  • flink运行报Exception in thread “main“ java.lang.IllegalStateException
  • Linux 基础知识整理(三)
  • 【开源】基于Vue.js的公司货物订单管理系统
  • Android Studio的笔记--三元表达式、布尔运算符、与() 或(||) 非(!)
  • 一、技术体系结构
  • 圈子社交系统:打破时间与空间的限制。APP小程序H5三端源码交付,支持二开!
  • Python:可以做什么?
  • Go中的延时执行魔法:深入浅出defer用法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • HTML5 基础总结
  • 周周爱学习之Redis重点总结
  • 程序员必看:查券助手返利机器人是如何实现的?
  • 每日一题(LeetCode)----字符串--反转字符串 II
  • 15、pytest的fixture调用fixture
  • 一部,即全部,十年超越之作一加12售价4299元起
  • C++ 函数详解
  • 高级搜索——伸展树Splay详解
  • 5-Tornado入门、程序的原理图、tornado不能使用同步代码的演示
  • Day14——数据结构和集合源码
  • Codeforces Round 913 (Div. 3)(A~G)