leetcode:332. 重新安排行程【没做出来】

题目来源

题目描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

class Solution {
public:
    vector<string> findItinerary(vector<vector<string>>& tickets) {

    }
};

题目解析

分析数据量

  • 数据量比较少,那么可能是暴力
    在这里插入图片描述

  • from和to均是长度为3的大写英文字母组成的字符串
    在这里插入图片描述

题意

在这里插入图片描述

给你一沓机票,用它去飞(遍历)图中的城市(节点),机票要用光(遍历完所有的边),返回出访问城市的路径,且机票不能重复用(遍历过的边要拆掉)。

题意说,用完机票所走的路径一定存在,找出一条即可。没找到用完机票的路径就是:你困在一个城市,手里有不合适的机票,用不出去。对应到图就是,到了一个点,没有邻接点能访问,但你还有边没遍历。

DFS

  • 先构建邻接表,以便能知道可以飞到哪些城市
  • 然后从JTK开始,尝试所有可能的选择,根据当前的选择,往下递归,尝试找出第一个用完机票的路径,如果找不出来,返回false,否则,返回true。
  • 访问过的边要删掉。比如,北京飞广州,到了广州,北京的邻居list中删掉广州。
  • 为什么要返回真假,因为要用它判断要不要提前回溯,在该分支走不下去,就要离开。
  • 我们选择飞入的城市,如果困住了,就是飞错了,要回溯,将北京的邻居list中删除的广州恢复回来,不飞广州了,飞别的试试,离开当前分支,切入别的分支,继续探索路径。

类似题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值