【Day16 中高难度算法挑战】巴士路线
介绍
总而言之是时候利用暑假锻炼一下算法技术,一提算法面试就面露难色的情形总不能一直持续下去。本栏目面向有一定基础的编程爱好者,每天(如果up不鸽)分享并解析一道LeetCode中高难度题目(通常是hard)。有兴趣的小伙伴可以一起跟着做并且讨论解法。目前的教材是花花酱的Leetcode Problem List【1】.
适合人群:
有一定算法基础,但是还未能顺利通过笔试/面试,总觉得算法题目想不明白的你。
不适合人群:
算法入门级选手(一上来就做难题可能并不合适,建议首先专注简单/中等题目)
非常不适合人群:
算法竞赛选手(这种小儿科的问题完全是在浪费您的时间)
过往题目在这里!

巴士路线
题目看这里,leetcode第815题,hard难度:
https://leetcode.com/problems/bus-routes/description/
强烈建议读者自己先做(不过真的会有读者吗,笑),有任何问题欢迎在评论区讨论,up看到了会及时回复。做完了欢迎在评论区打卡~
解析
这道题其实很独特,通常我们做bfs都是以节点为单位进行扩展,但在这道题目中,我们需要根据公交路线(或称为“路由”)进行扩展。这意味着,当我们从一个站点开始搜索时,我们不是仅仅访问邻近的站点,而是访问该站点上所有公交线路所到达的所有站点。换句话说,当我们“乘坐”一辆公交车时,我们可以视为几乎“立即”访问了该线路上的所有站点。(以上为ChatGPT的观点,我觉得说得很清楚)

思考乐园
如果一个车站被两条或多条公交路线共同经过,以上程序将如何处理这种情境?欢迎将答案写在评论区~
音乐推荐
笔者昨天做这题时总想着每次遍历一个车站,于是就顺利卡住,未能及时发专栏。到最后还是在床上干躺着的时候忽然发现其中玄机,原来每一步是指当前不换乘车所能到达的所有车站。此题本身实现不难,但是这个思考角度确实非常有趣。这首来自法里达的逍遥一客送给终于到达周末的你。博得之门3,启动!
教材链接
【1】https://zxi.mytechroad.com/blog/leetcode-problem-categories/