如:
(2,12);
(12,2);
(2,4);
(4,5);
(5,6);
(6,5);
(5,4);
(4,2);
(2,8);
(8,10);
(10,11);
(11,15);
(15,14);
(14,15);
(15,11);
(11,10);
(10,8);
(8,2);
(6,,18);
(18,16);
(16,18);
(18,7);
(7,19);
在这个表的数据结构中 (起点,终点)
假设当前人所在起点为2 走的最终点 为19 ,也就是 (7,19);最后 现在寻求算法过程计算 走的最短路线,在便利查找的过程中会出现死循环的情况那么这个时候就必须从下一节点查找。 

解决方案 »

  1.   

    已知邻接表和路径权因子,可以构造一颗搜索树。搜索从节点A到节点B的最短路径
    Step0:设置搜索路径最大值为无穷大。
    Step1:将起始节点A复制一份,作为搜索树的根节点,并将节点A加入叶子结点集合。
    Step2:计算叶子节点集合中各个节点到搜索树根节点的路径长度。
    Step3:计算叶子节点集合中各个结点的状态。
            Step 3.1:如果叶子节点不存在后续邻接节点,或者它所有的后续邻接节点在该叶子节点到根节点A的路径上均有出现,则设置其状态为“终端节点”
            Step 3.2:如果叶子节点到根节点A的路径长度>搜索路径最大值,则设置其状态为“终端节点”
            Step 3.2:如果叶子节点已经是目标节点B的一个复制品,则设置其状态为“目标节点”
            Step 3.3:其它情况则设置其状态为“可扩张节点”。
    Step4:如果叶子节点中已经包含了目标节点,则保留长度最短的搜索路径,并改写搜索路径最大值。
    Step5:对于叶子节点集合中所有状态为“可扩张节点”,将它们从叶子节点集合中移走,扩张其后续节点(要求这些后续节点不与该叶子节点到根节点的路径上的各个节点重复),并将这些扩张后的节点加入叶子节点集合。
    Step6:重复Step2~Step5,直到叶子节点集合中不再存在可扩张节点了。
    Step7:如果叶子节点集合中存在目标节点,则其搜索路径必然在Step4中保留下来,输出它。否则说明不存在从出发节点到目标节点的路径。