过程GRAPHSEarcH 


    (1)G <-- S,OPEN <-- (S);建立一个搜索图G,只含有初始结点S,建立一个表
       0PEN,它 只含有初始结点S。

    (2)cLOSED <-- ( ),建立一个表cLOSED,它的起始状态为空表。

    (3)LOOP,if OPEN=( ) then return FAlL

    (4)n <— FIRST(OPEN),OPEN <-- TaiL(OPEN),cLOSED <-- cONS(n,cLOSED);从
       OPEN表中取出一个结点n,将其放入cLOSED表。

    (5)if n ∈ E 目标集 then return[s-->...-->n],如果n为目标结点,则沿着G中
       从n到s的指针得出一条路径,并以此返回(指针在步骤7建立)。

    (6)M<—expand(n),G'<--G,G<--{M,G},扩展结点n,建立集合M,使M仅含有n的
       后继者,而不含有n的祖先,并把M中的结点作为n的后继者加入到G中。

    (7)对M中的所有结点m 
           if m∈G',then建立指针m-->n,OPEN<--cONS(M,OPEN),对M中原来不在G中
       的结点(即不在OPEN表中也不在cLOSED表中)建立一个从这些结点到n的指
       针,并把它们加入到表OPEN。
           if m∈G',then 决定是否改变指针m-->n,对M中已在G中的结点(已在OPEN表中
       或cLOSED表中),决定是否应当将它们的指针指向n(这些结点已有了指针)。
           if m∈E cLOSED then决定是否应改变m的后代的指针。
     
    注解

    (8)对OPEN表中的结点重新排序

    注解

    (9)GO LOOP

    返回