寻找穿越整个轨道,而不会在任何障碍车道的最小数量的必要改变
甲轨道由5xN板(用5条泳道和N正方形每个泳道)表示。一些平方被封锁,(以上的图像中的红色块)浇道不能穿过它们。亚军可只能前进或横向(即提前或转换车道),并不能碰到或跳过任何障碍。通过板的对角线或向后移动时也不允许。转轮可以开始和他选择的任意车道完成。你的任务是确定,考虑到赛道上,车道变化最小数量要完成比赛。
输入矩阵将是一个5xN矩阵与表示阻塞方块1和0表示可用/空闲的正方形。你的函数的输出应该是一个数字,指示车道的最小数量的变化必须完成比赛。例如,在上述图中所示的轨道将被表示为:
X = [0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0];
和你的函数
N = fivelanes(X);
should return n=2, since there are multiple paths available (e.g. yellow line in the picture above) that would allow the runner to reach the end of the track with only 2 lane changes, but none that would allow the runner to complete the track with only one or less lane changes.
祝好运!
小字:你可以假设总是会有只需要向前和lateral-运动的起点和终点之间的直接路径。测试包不包括在有这种形式没有可能的路径的情况。车道改变计数相同而不管它们是否涉及相邻或不相邻的车道(即,从第1道到切换泳道4算作一个车道变更,只是与从第1道切换到第2泳道)。当切换车道转轮可不过障碍物运行(即,从第1道切换到泳道3是不可能的,如果有在第2道的障碍物在轨道该点)。下面曲目和可能的最低限度,变更车道路径的几个例子(注:最佳路径不是唯一的;在所有这些例子中变更车道的最佳数量是,巧合的是,5)
为什么我不能用bwlabel从成像工具箱?
这个花了一段时间来解决笑
很骄傲我的解决办法的。
大问题!
@Daniel,这个作弊不起作用,因为用户目录是随机的(提示:你可以简单地使用相对路径来代替)。以任何方式,这种形式的作弊/黑客不是在这个特殊的科迪问题欢迎。There are, nevertheless, plenty of hacking problems in Cody (e.g. //www.tianjin-qmedu.com/matlabcentral/cody/problems?term=tag%3Ahack) that welcome and even encourage this sort of explorations, so please use those venues instead if you are interested.
不知何故,这个测试套件已经改变,现在我无法通过测试62,即使我没有用一个查找表解决方案。请指教。
该解决方案已超时(这只是个时间太长)。我会建议改变你的代码,用来代替dijkstra_lanes为每个StartLane到EndLane组合中的一个单独的调用一个电话。你可以这样做,例如,通过加入两个节点到您的曲线图中,一个“开始”,其连接(与距离0)到第一行中的每个非阻挡车道节点,以及连接一“端”的节点(随着距离0)到最后一排的每个非封闭车道。然后,你只需要调用dijkstra_lane一次来计算这个扩展图的最优路径的距离,而不是调用你的函数N1 N2 *次(第一次为每个N1 / N2的/最后行×非阻断位置)
谢谢你的建议。
增加了一些测试用例劝阻查表解决方案(由我喜欢你的想法BIN2DEC向董事会编码,我抄在我的测试套件现在:)万博 尤文图斯
增加了一些测试用例来阻止这种解决方案万博 尤文图斯
对不起,科迪Web界面有很长的解决方案文件的一些问题(解决无法查看,HTML解析被曲解所以在这之下列出的其他解决方案无法显示等),请你重新提交一个万博 尤文图斯较短的文件?然后,我就干脆rescore该解决方案,迫使它要裁剪(这也将修复的格式问题)