基于深度优先遍历的可达路径的查找方法与装置的制造方法_3

文档序号:9842154阅读:来源:国知局
tialPath的最后一个点就是终点时得到一条可行路径;返回。否则,找到 partialPath中最后一个点的可达节点,找打这些节点中不属于partialPath路径的点。从 这些点的第一个点开始加入partialPath后得到新的partialPath,递归调用遍历算法。 [0073]结合图4所示,图的邻接矩阵:Graph
[0075] 假设我们要找出结点3到结点6的所有路径,那么,我们就设结点4为起点,结点7为 终点。我们需要的存储结构有:一个保存路径的栈、一个保存已标记结点的数组,那么找到 结点3到结点6的所有路径步骤如下:
[0076] function possiablePaths = f indPath(Graph, [4] ,7,0)
[0077] 1.找到当前路径的最后一个点4。
[0078] 2 ·找到从4出发的所有可达点[2,8]
[0079] 3.判断若4是终点,则得到一条路径,返回。否则
[0080] 4.从[2,8]中的第一个点开始,2不是终点,且2不在当前路径中。把2加入到当前路 径,得[4,2]。4到2的权重=1。
[0081 ] 5.递归调用打11(^&让(6瓜口11,[4,2], 7,1)。
[0082] 6.当前路径的最后一个点是2,找到从2出发的所有可达点[4,5,1]
[0083] 7. 2不是终点,从[4,5,1]中找到第一个开始点4,4不是终点,但是在当前路径中, 剔除4.
[0084] 8.第二个点5,5不是终点,也不在当前路径,将5加入当前路径,得到[4,2,5],2到5 的权重=1
[0085] 9 ·递归调用 findPath(Graph,[4,2,5],7,2).
[0086] 10.当前路径的最后一个点是5,找到从5出发的所有可达点[2,8]
[0087] 11. 5不是终点,从[2,8]中找到第一个点2,2不是终点,但2在当前路径中,剔除2.
[0088] 12.第二个点8,8不是终点,也不在当前路径中,将8加入当前路径,得到[4,2,5, 8],5到8的权重=1
[0089] I3·递归调用 findPath(Graph,[4,2,5,8], 7,3)
[0090] 14.当前路径最后一个点是8,找到从8出发的所有可达点[5,4]
[0091] 15. 8不是终点,从[5,4]中找到第一个点5,5不是终点,但是5在当前路径中,剔除 5
[0092] 16.第二点4,4不是终点,但是4在当前路径中,剔除4.没有其余点了。该次 findPath(Graph, [4,2,5,8],7,3)结束,返回上一层调用。
[0093] 17 ·上一层中除了8没有别的点了,上一层的f indPath(Graph,[4,2,5],7,2)结束, 返回上一层调用。
[0094] 18.上一层中还有第三个点1,1不在当前路径[4,2]中,且1不是终点。2到1的权重 =1
[0095] I9 ·递归调用 findPath(Graph,[4,2,1],7,2)
[0096] 20.当前路径的最后一个点是1,找到1出发的所有可达点[2,3]
[0097] 21. 1不是终点,从[2,3]中选第一个点2,2不是终点,但2在当前路径中,剔除2
[0098] 22.第二个点3,3不是终点,也不在当前路径中。1到3的权重=1
[0099] 23.递归调用打11(^&让(6瓜口11,[4, 2,1,3],7,3)
[0100] 24.当前路径的最后一个点是3,找到3出发的所有可达点[1,6,7]
[0101] 25. 3不是终点,从[1,6,7]中取第一个点1,1不是终点,但1在当前路径。剔除
[0102] 26.取第二个点6,6不是终点,6不在当前路径,3到6的权重=1
[0103] 2了 ·递归调用 findPath(Graph,[4,2,1,3,6],7,4)
[0104] 28.当前路径最后一个点是6,找到6的所有可达点[3,7]
[0105] 29. 6不是终点,从[3,7]中选第一个点3,3不是终点,但3在当前路径中,剔除
[0106] 30.第二点7,7是终点,得到新的路径。从6到7的权重=1.新路径为4,2,1,3,6,7; 权重=5.
[0107] 31.没有其余可达点,该层递归结束,返回上一层
[0108] 32.上一层还有一个点7,7是终点,找到新路径,从3到7的权重=1.新路径为4,2, 1,3,7;权重=4.
[0109] 33.没有其余的可达点,该层递归结束,返回上一层
[0110] 34.上一层没有其余可达点,该层递归结束,返回上一层
[0111] 35.上一层没有其余可达点,该层递归结束,返回上一层
[0112] 36.该层的当前路径是[4],还有一个可达点8,把8加入到当前路径,4到8的权重=
[0113] 37 ·递归调用findPath(Graph,[4,8],7,1)
[0114] 38.重复6到35的过程得到2条新的路径:
[0115] 4,8,5,2,1,3,7;权重=6
[0116] 4,8,5,2,1,3,6,7;权重=7
[0117] 将搜索得到的路径保存在路径结果表中:
[0118]
[0119]本实施例中,所有可能路径的查找是将其中查找最后一个点的所有可达点,改为 从路段表MD_SEGMENT中找该点做为上游路口的所有下游路口点,所有的下游路口所有可达 点。
[0120] 两点之间的权重:由上游路口和下游路口从MD_SEGMENT中找到路段ID,由路段ID 和当天日期,从AY_RESULT_SEGMENT_AVG_SPEED中查到平均行程时间,若时间不是-1则,用 该时间作为权重,若时间=-1,用〇作为权重。最终数据保存在mongo中的AY_RESULT_ VEHICLE_TRACK
[0121] 结合图3、图4所示,本例中,前述步骤2的实现具体包括:
[0122] 步骤2-1:从每个车辆的大概轨迹数据中取出一条数据,对该数据的所有途经路口 信息中的所有路口,从第一个开始,依次查看下一个路口是否为前一个路口的下游路口:若 所有相邻路口的后一个路口都是前一个路口的下游路口,则将相应的数据保存在一跟踪数 据表中;若存在某两个相邻的路口 ID不是上下游路口关系,则将这两个ID中的前一个作为 起点,后一个作为终点,二者时间差作为t,利用深度优选遍历算法求出从起点到终点,且时 间不超过t*l(l为时间配置系数,可配置)的所有路径。从路径中找到权重最小且路径特点 标记=1的路径作为可能路径;若不存在路径特点标记=1的路径,则直接找到0权重路径值 最小的路径作为可能路径;
[0123] 步骤2-2、由步骤2-1补齐所有相邻2个路口不是上下游路口的之间的路径;
[0124] 步骤2-3:将补齐后的路径与原来的路径合并为一条路径保存在前述的跟踪数据 表内。
[0125] 由以上技术方案可知,本发明的方案中,依据电子
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1