815. 公交路线

题目

我们有一系列公交路线。每一条路线 routes[i] 上都有一辆公交车在上面循环行驶。例如,有一条路线 routes[0] = [1, 5, 7],表示第一辆 (下标为0) 公交车会一直按照 1->5->7->1->5->7->1->… 的车站路线行驶。

假设我们从 S 车站开始(初始时不在公交车上),要去往 T 站。 期间仅可乘坐公交车,求出最少乘坐的公交车数量。返回 -1 表示不可能到达终点车站。

示例:
输入:
routes = [[1, 2, 7], [3, 6, 7]]
S = 1
T = 6
输出: 2
解释:
最优策略是先乘坐第一辆公交车到达车站 7, 然后换乘第二辆公交车到车站 6。
说明:

1 <= routes.length <= 500.
1 <= routes[i].length <= 500.
0 <= routes[i][j] < 10 ^ 6.

思路

这一题的主要思路就是广搜,那么我们可以考虑在每个公交站上标记经过它的线路,这样先遍历新增的点,再遍历这些点的线路(之前没走过的),不断循环即可。
这一次开始只跑了160ms,看到个76ms的算法和我的思路是一样的,然后发现unordered_map效率比map要高不少。同时也要注意判断冗余不一定都会加快速度,例如这一次若公交线路经过一些之前已经经过了的点,那么要判断这些点是否已经访问过的代价是挺大的(只能用map,因为公交站的站号很大),其实这些点就算冗余也没什么关系,因为一个点不可能有太多公交线路经过,用一个bool数组确保这些线路也不会重新访问,还是可以接受的。

class Solution {
public:
    int numBusesToDestination(vector<vector<int>>& routes, int startPoint, int aimPoint){
        if(startPoint == aimPoint){
            return 0;
        }
        unordered_map<int ,vector<int> > pointMp; //map的查找比unordered_map慢。
        queue<int> nextPoint ;
        nextPoint.push(startPoint);
        vector<bool> visitRoute(routes.size() , false);
        int nowPointLength , nowDepth = 0;
        for(int loop = 0 ;loop < routes.size() ; loop++ ){
            for(int loop1 = 0 ; loop1 < routes[loop].size() ; loop1++){
                int nowPoint = routes[loop][loop1];
                pointMp[nowPoint ].push_back(loop);
            }
        }
        while(!nextPoint.empty()){
            vector<int> nextRoute;
            nowPointLength = nextPoint.size();// 新一层的长度,因为nextPoint的大小会在后面改变,这里先记录
            nowDepth++;
            while(nowPointLength --){ // 遍历新的一层的公交站
                int nowPoint = nextPoint.front();
                nextPoint.pop();
                for(auto nowRoute:pointMp[nowPoint]){ // 遍历公交站的线路
                    if(!visitRoute[ nowRoute ] ){
                        visitRoute[ nowRoute ] = true;
                        for(auto nowPoint:routes[nowRoute]){ // 将线路上没有访问过的点加入nextPoint
                            nextPoint.push(nowPoint); //用一个map检测点是否访问过,访问过就不放进nextPoint速度更慢
                                                    //应该是因为map的访问是logN复杂度,但一般情况下一个点只有少量线路
                                                    //重新遍历也没关系
                            if(nowPoint == aimPoint){
                                return nowDepth;
                            }
                        }
                    }
                }
            }
        }
        return -1;
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2001年,公交车调度获奖是由于其在城市交通管理和公共交通服务方面取得的卓越成就。 首先,公交车调度在城市交通管理方面获奖。该调度系统采用了先进的技术和管理方法,能够准确预测和分析城市交通状况。通过实时监测车辆位置和运行情况,调度中心可以及时调整公交车线路和运行策略,从而有效缓解交通拥堵和优化路线规划。这种智能调度系统节约了时间和燃料,提高了行车效率,使城市交通更加顺畅和高效。 其次,公交车调度在公共交通服务方面获奖。调度中心以乘客需求为导向,根据不同时段和区域的客流量变化,合理安排公交车运行计划。通过提供多样化的线路选择和频繁的班次,满足了乘客的出行需求。此外,调度中心还引入了智能票务系统和信息发布平台,使乘客可以方便地购买车票和获取最新的公交信息。公交车调度提供的便利和舒适的乘坐体验,增强了市民对公共交通的认可和使用率。 通过提供高效的交通解决方案和优质的公共交通服务,公交车调度对于改善城市交通和提升居民生活质量起到了重要作用。获得该奖项是对其出色工作的认可和肯定,也激励了公交车调度团队不断努力改进和创新,为城市交通事业做出更大的贡献。 ### 回答2: 2001.d公交车调度获奖答案,我认为可以归结为以下几个关键因素: 首先,准确的线路规划是成功调度的基础。在调度公交车时,需要充分考虑市区交通状况、人流量以及乘客需求等因素,合理规划线路,保证公交车能够高效地覆盖城市各个重要地区,并兼顾不同时间段的客流情况。 其次,科学精确的调度算法是关键。公交车调度是一个复杂的问题,需要考虑到公交车运行速度、乘客上下车时间、信号灯配时等多个因素。利用代计算机技术和优化算法,制定出科学有效的调度方案,并结合实时数据进行动态调整,能够提高公交车的运行效率和准时率。 此外,合理的车辆配备和调度策略也是成功调度的关键。根据城市的交通状况和乘客需求,科学地确定公交车的数量和类型,并制定合理的调度策略,如高峰期加大车辆密度、晚间减少车辆等,以提供更好的服务质量和乘车体验。 最后,良好的管理与组织也是成功调度的保障。需要建立一套完善的调度管理制度,加强与交通相关部门、公交公司和乘客的沟通与协调,及时处理运营中的问题和突发事件,确保公交车运营的顺利进行。 综上所述,2001.d公交车调度获奖答案的成功离不开准确的线路规划、科学精确的调度算法、合理的车辆配备和调度策略,以及良好的管理与组织。通过科技和创新的应用,能够不断优化公交车的调度效率和服务质量,进一步提升城市交通运输水平和乘客出行体验。 ### 回答3: 2001年D公交车调度获奖答案是:在这项比赛中,我们团队提出了一种高效的公交车调度方案,旨在减少乘客等待时间,提高公交服务质量。我们团队的方案基于跟踪乘客上下车数据和交通流量情况,结合智能调度系统进行实时优化调度。 首先,我们收集了大量的乘客上下车数据和交通流量数据。通过分析这些数据,我们可以了解到不同时间段和地点的乘客数量和流量情况,以及乘客的出行目的地和路线。 其次,我们采用了智能调度系统进行实时优化调度。该系统可以根据乘客流量和交通流量情况进行调度决策,实时调整公交车的发车频率和行驶路线,以满足乘客的需求并优化公交车的运行效率。 另外,我们还考虑到了乘客的出行需求和便利性。我们通过增加座椅数量、提供站台信息和车辆位置的实时显示等措施,提高乘客的乘坐舒适度和出行体验。 最后,我们还提出了一套完善的评估和反馈机制。我们通过乘客满意度调查和调度效果评估来监测和改进我们的调度方案,以确保公交服务始终保持在一个高水平。 总之,2001年D公交车调度获奖答案是我们团队基于乘客上下车数据和交通流量情况,结合智能调度系统进行实时优化调度,以减少乘客等待时间,提高公交服务质量的方案。我们的方案不仅优化了公交车的运行效率,还更好地满足了乘客的出行需求和提高了乘坐舒适度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值