楚楚街2016招聘笔试(航线)
来源:互联网 发布:ios mvvm的数据绑定 编辑:程序博客网 时间:2024/05/01 01:41
楚楚街2016招聘笔试(航线)
题目描述
“呼!!终于到了,可是接下来要怎么走才能到达楚楚街港港呢?”亮亮在醋溜港直发愁。
突然“啾”的一下,一只银色小船出现在亮亮的面前,上面坐着小精灵丹丹“又见面了,有什么可以帮助你的么?”
小精灵向亮亮眨了眨眼睛,微笑着说。 “我想去楚楚街港,但我不知道要怎么走,请问你可以告诉我么?”亮亮按捺着激动的心情轻声问道。
“楚楚街港呀……那是个特别美好的地方”小精灵歪着头想了想,说“我只能告诉你大海上所有的航线,剩下的就只能靠你自己啦~”
“只有所有的航线呀”,亮亮的内心再三挣扎,却又没有其他的办法。 “不管有多困难,我一定要达到楚楚街港,请你告诉我吧”亮亮坚定地对小精灵说。
小精灵欣赏地点了点头,递给亮亮一张航线图,并叮嘱道“时限是1000天,一定要到哦~”,然后如来时一般“啾”的一声,消失了。
亮亮现在迫切地想要抵达楚楚街港,请问亮亮最快能在第几天抵达楚楚街港呢?
输入描述:
一行包含两个整数 N(2<=N<=500),M(1<=M<=2000),用单个空格隔开。表示公有 N 个港,M 条航线。起点为 1,终点为 N。
接下来 M 行,每行包含五个整数P,Q(1<=P,Q<=n), K(1<=K<=1000),X,Y(0<=X,Y<=10000),代表 P、Q 两个港有航线并需要 K 天,并且该航线在第 X 天到第 Y 天天气恶劣不可通行。
输出描述:
一个整数,即亮亮最快能在第几天抵达楚楚街港
输入例子:
4 4
2 1 1 7 13
4 3 2 10 11
1 3 8 9 12
2 3 3 2 10
输出例子:
14
java版本的代码实现:
package cn.cat.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Set;import java.util.TreeSet;public class Test09 {public static void main(String[] args) {/* * 解题思路:此题目涉及到单源最短路径问题,采用Dijkstra算法 * *///起始地int src = 1;//目的地int target = 4;//线路int[][] lines = new int[][]{{2, 1, 1, 7, 13},{4, 3, 2, 9, 9},{1, 3, 8, 9, 12},{2, 3, 3, 2, 10},{1, 4, 10, 2, 3}};LineWayPlan lineWayPlan = new LineWayPlan(lines);LineWayPlan.LineWayInfo optimumLineWay = lineWayPlan.getOptimumLineWay(src, target);System.out.println(optimumLineWay);}/** 最短航路方向规划 * <PRE> * Filename: Test09.java * Description: * Copyright: Copyright (c) 2016 * Company: TCL Co., Ltd. * </PRE> * @author gwj * @version 1.0 * <PRE> * Create at: 2017年6月19日 上午10:08:19 * Modification History: * Date Author Version Description * ------------------------------------------------------------------ * 2017年6月19日 上午10:08:19 gwj 1.0 新建 * </PRE> */static class LineWayPlan{//航线图private final int[][] lines;//待规划的港口编号。使用TreeSet,港口编号有小到大排序。private Set<Integer> pendingPlanPortNum = new TreeSet<Integer>();//最佳的线路走向方法private List<LineWayInfo> optimumLineWay = new ArrayList<LineWayInfo>();public LineWayPlan(int[][] lines) {this.lines = lines;for (int[] line : lines) {pendingPlanPortNum.add(line[0]);pendingPlanPortNum.add(line[1]);}//先格式化线路,方便后面的计算操作。formatLines();//计算出最佳航线calcuteOptinumLineWay(1);}/** 计算出最佳的航线方式 * @Description: * @author gwj * @Created 2017年6月19日 上午10:13:42 * @return void */private void calcuteOptinumLineWay(int startPort) {if (!pendingPlanPortNum.remove(startPort)) {throw new IllegalArgumentException("没有对应的港口编号" + startPort);}for (int[] line : lines) {if (line[0] == startPort) {boolean isReplace = false;for (LineWayInfo lineWay : optimumLineWay) {int needDay = lineWay.needDay + line[2];//刚好遇到天气变动的时间内,需要等天气变好后再航行。if (needDay >= line[3] &&(needDay <= line[4] || lineWay.needDay < line[4])) {//line[4]的元素指坏天气的结束时间,从此结束时间开始行航行。needDay = line[2] + line[4];}if (lineWay.srcPort == startPort && lineWay.desPort == line[1]&& lineWay.needDay > needDay) {//当前线路已经存在,但又更短的耗时时间,故更新耗时时间lineWay.needDay = needDay;isReplace = true;} else if (lineWay.desPort == startPort){//当前线路有连接点,继续连接线路长度lineWay.needDay = needDay;lineWay.desPort = line[1];isReplace = true;}}if (!isReplace) {int needDay = line[2];//刚好遇到天气变动的时间内,需要等天气变好后再航行。if (needDay >= line[3] && needDay <= line[4] ||line[4] < needDay) {//line[4]的元素指坏天气的结束时间,从此结束时间开始行航行。needDay = line[2] + line[4];}optimumLineWay.add(new LineWayInfo(startPort, line[1], needDay));}}}Iterator<Integer> iterator = pendingPlanPortNum.iterator();//如果还有未计算的港口航线,则递归遍历。if (iterator.hasNext()) {calcuteOptinumLineWay(iterator.next());}}/** 格式化线路 * @Description: * @author gwj * @Created 2017年6月19日 上午10:31:03 * @return void */private void formatLines() {for (int[] line : lines) {//格式化,把元素1的港口小于元素2的港口if (line[0] > line [1]) {swap(0, 1, line);}}}/** 交换数组元素位置 * @Description: * @author gwj * @Created 2017年6月19日 上午10:29:54 * @param srcIndex * @param descIndex * @param data * @return void */private void swap(int srcIndex, int descIndex, int[] data) {int temp = data[descIndex];data[descIndex] = data[srcIndex];data[srcIndex] = temp;}/** 航线方向信息 * <PRE> * Filename: Test09.java * Description: * Copyright: Copyright (c) 2016 * Company: TCL Co., Ltd. * </PRE> * @author gwj * @version 1.0 * <PRE> * Create at: 2017年6月19日 上午9:50:51 * Modification History: * Date Author Version Description * ------------------------------------------------------------------ * 2017年6月19日 上午9:50:51 gwj 1.0 新建 * </PRE> */private static class LineWayInfo {/**出发的港口 * */int srcPort;/** * 目的地港口 */int desPort;/** * 到点此港口所需要的时间 */int needDay;public LineWayInfo(int srcPort, int desPort, int needDay) {this.srcPort = srcPort;this.desPort = desPort;this.needDay = needDay;}@Overridepublic String toString() {return srcPort + " -> " + desPort + "(所需时间为" + needDay + "天)";}}/** 获取最佳的航线方式 * @Description: * @author gwj * @Created 2017年6月19日 上午10:12:08 * @return * @return List<LineWayInfo> */private LineWayInfo getOptimumLineWay(int src, int target) {System.out.println(optimumLineWay);int needDay = Integer.MAX_VALUE;LineWayInfo result = null;for (LineWayInfo lineWay : optimumLineWay) {if (lineWay.srcPort == src && lineWay.desPort == target && needDay > lineWay.needDay) {needDay = lineWay.needDay;result = lineWay;}}return result;}}}
题目描述
“呼!!终于到了,可是接下来要怎么走才能到达楚楚街港港呢?”亮亮在醋溜港直发愁。
突然“啾”的一下,一只银色小船出现在亮亮的面前,上面坐着小精灵丹丹“又见面了,有什么可以帮助你的么?”
小精灵向亮亮眨了眨眼睛,微笑着说。 “我想去楚楚街港,但我不知道要怎么走,请问你可以告诉我么?”亮亮按捺着激动的心情轻声问道。
“楚楚街港呀……那是个特别美好的地方”小精灵歪着头想了想,说“我只能告诉你大海上所有的航线,剩下的就只能靠你自己啦~”
“只有所有的航线呀”,亮亮的内心再三挣扎,却又没有其他的办法。 “不管有多困难,我一定要达到楚楚街港,请你告诉我吧”亮亮坚定地对小精灵说。
小精灵欣赏地点了点头,递给亮亮一张航线图,并叮嘱道“时限是1000天,一定要到哦~”,然后如来时一般“啾”的一声,消失了。
亮亮现在迫切地想要抵达楚楚街港,请问亮亮最快能在第几天抵达楚楚街港呢?
输入描述:
一行包含两个整数 N(2<=N<=500),M(1<=M<=2000),用单个空格隔开。表示公有 N 个港,M 条航线。起点为 1,终点为 N。
接下来 M 行,每行包含五个整数P,Q(1<=P,Q<=n), K(1<=K<=1000),X,Y(0<=X,Y<=10000),代表 P、Q 两个港有航线并需要 K 天,并且该航线在第 X 天到第 Y 天天气恶劣不可通行。
输出描述:
一个整数,即亮亮最快能在第几天抵达楚楚街港
输入例子:
4 4
2 1 1 7 13
4 3 2 10 11
1 3 8 9 12
2 3 3 2 10
输出例子:
14
- 楚楚街2016招聘笔试(航线)
- 牛客网---2016---楚楚街航线
- 楚楚街笔试题—航线
- 楚楚街2016招聘笔试(旅途)(未完待续)
- 牛客网---2016---楚楚街解密
- 牛客网---2016---楚楚街旅途
- 牛客网---2016---楚楚街迷雾
- 牛客网---2016---楚楚街寻宝
- 牛客网---2016---楚楚街礼物
- 蘑菇街2016招聘笔试
- 楚楚街2016校招 ——礼物(动态规划)
- 楚楚街 解密
- 楚楚街 寻宝
- 楚楚街 旅途
- 蘑菇街2016招聘笔试(回文串)
- 蘑菇街2016招聘笔试(最大间隔)
- 蘑菇街2016招聘在线笔试题
- 京东2016招聘笔试(抛小球)
- Cortex-M3的特权级别
- 《剑指offer》刷题笔记(递归和循环):变态跳台阶
- think in java 第十五章 泛型 总结随笔
- SpringMVC的各种参数绑定方式
- 关于微信小程序wx.switchTab的问题
- 楚楚街2016招聘笔试(航线)
- Redis缓存(RedisTemplate)
- PhpStorm中如何配置SVN,详细操作方法
- 二分查找法 -- java
- SQL中重复数据的查询与删除---小白收藏篇
- Django REST framework 中文教程1:序列化
- 网络通信
- 关于在tomcat中一个80端口跑多个项目的配置
- C++带赖子的麻将听牌检测算法实现