在不改变dijkstra算法本身的情况下,完全可以从数据源的角度出发,解决我们的一些简单需求:
比较初级且粗暴的玩法,可以是强行赋予一些link极端的路段长度。
对于我们坚决不希望车辆行驶的道路、禁行区、或是危险区,就赋予一个无穷大的长度。那么就会有一下两种情况:
①dijkstra算法提供了不经过这些路段的最短路线,成功完成运输任务;
②计算出来的结果是,最短路线长度趋向于无穷大,那么我们就认定为,找不到合适的路线,要不这个时段就换别的交通方式运输吧,或者适当放开一些路段的限制;
对于我们希望车辆采用的路段,那么就适当缩小对应路段的长度,当然这个长度不能为负数,这是dijkstra算法自身的特性决定的。
如果调整的量级足够有“诱惑力”,路线自然就切换到了我们引导的方向上,某些地图软件的各类“猜你喜欢”“大路优先”“高速优先”就是这么来的。
当然,拍脑袋、看心情地调整局部的几个路段长度,只能解决一些临时性封堵、批量修改数据的情况,
如何较为智慧地修改全域的路段“权重”,此处提出一种相对可解释性较好,但是也未见得真的很科学的方法:
下图展示了部分可能影响全域的**路段“权重”**的因素,大致包括“静态”的固有数据和“动态”的运行数据
经过这样的调整
路网的“物理位置关系”没变,但是“拓扑关系”,或者说在算法中的“两点距离”已经变了
这样,就在原始层面的dijkstra算法基础上,通过一点点的变化,获得了更贴近我们需求的结果。