重复以上步骤,直到所有节点都具有永久性标号。此时的每个永久性标号值,代表起始节点到该节点的最短距离。如果只要求起点到指定终点的最短距离,则在指定终点获得永久性标号时即可停止标号过程。
要求出起点到终点的最短路径,需要从终点逆推,求出永久标号差值正好等于线路长度的节点以下为算法示例。
在图3中,查询从节点1到节点6的最短路径的标号过程如下:(*表示永久性标号)
图3 算法示例
所以节点1到节点6的最短距离为8,进行逆推求最短路径。节点6和节点5之间的永久标号之差是8-6=线路(5,6)的长度,所以可以回到节点5。节点5和节点2之间的永久标号之差是6-4=线路(2,5)的长度,回到节点2。节点2和节点1的永久标号之差4=线路(1,2)的长度,回到起点1,得到最短路径1-2-5-6。在节点5时,还可以回到节点3得到最短路径1-3-5-6。
三、程序实现
在VB中引用MapX控件的步骤为:工程→部件→控件→MapInfo MapX V5。在窗口中加入MapX控件,添加菜单、工具栏、文本框等,程序界面如图4所示。在MapX控件中添加“中国主干公路节点”和“中国主干公路线”图层步骤为:在MapX控件上点右键→特性→Layers→Add,选中要添加的图层即可,实现的核心代码如下:
图4 程序界面
|