同事的你

明天你是否会想起
昨天你写的程序
明天你是否还惦记
曾经爱编程的你

 

领导们都已想不起
曾经加班的你
我也是偶然看程序
才想起同事的你

 

谁聘了牛B烘烘的你
谁安慰天天加班的你
谁把你的设计做起
谁给你做的升级

 

你从前总是很小心
从不把离职的事提起
你也曾无意中说起
薪水实在太低

 

那时候屏幕总是在闪
日子总过得太慢
你总说离职遥遥无期
转眼就各奔东西

 

谁聘了牛B烘烘的你
谁安慰天天加班的你
谁看了我给你写的信
谁把它删在回收站里

这个问题可以使用回溯法来解决,对于每个目的地,尝试从它出发并遍历所有的目的地,记录每次遍历所需的天数,最终返回最短的旅行天数。 具体实现如下: ```java public static int shortestTravelDays(int[] A) { int n = A.length; Set<Integer> destinations = new HashSet<>(); // 存储所有目的地 for (int i = 0; i < n; i++) { destinations.add(A[i]); } int minDays = Integer.MAX_VALUE; for (int start : destinations) { Set<Integer> visited = new HashSet<>(); // 存储已经访问过的目的地 visited.add(start); int days = dfs(A, visited, start, start, 1); if (days < minDays) { minDays = days; } } return minDays; } private static int dfs(int[] A, Set<Integer> visited, int start, int cur, int days) { if (visited.size() == A.length) { // 所有目的地都已经访问过 return days; } int minDays = Integer.MAX_VALUE; for (int i = 0; i < A.length; i++) { if (!visited.contains(A[i])) { // 如果目的地没被访问过 visited.add(A[i]); int d = dfs(A, visited, start, A[i], days + 1); if (d < minDays) { minDays = d; } visited.remove(A[i]); } } if (cur == start && visited.size() < A.length) { // 如果回到了出发地但是还没有访问完所有目的地 return Integer.MAX_VALUE; // 这条路径不合法,返回无穷大 } return minDays; } ``` 主要思路是从每个目的地出发,尝试遍历所有的目的地,记录所需的天数,最终返回最短的旅行天数。在遍历的过程中,使用一个 Set 来记录已经访问过的目的地,避免重复访问。如果遍历的过程中回到了出发地但是还没有访问完所有目的地,说明这条路径不合法,返回无穷大。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值