一般图搜索算法

/*
节点深度:根节点指示初始状态,令其节点深度为0,其他节点的深度d(n)地规定以为d(n)=d(n-1)+1
路径:要求是无环的
节点扩展:应用操作符将上一状态(节点ni)转移到下一状态(节点nj),nj为被扩展节点,且为ni的子节点
OPEN表:用于存放刚生成的节点,它们尚未进行扩展。对于不同的搜索策略,节点在OPEN表中的排列顺序是不同的。
CLOSE表:用于存放将要进行扩展或已进行扩展的节点。
用S和T分别表示初始节点和目标节点,用PREDx表示节点x的父节点。
给出一般图搜索算法如下:
*/
OPEN <- {S}, CLOSED <- Ø, PREDs <- NULL, found <- false;
while(OPEN != Ø && !found)
{
	x <- OPEN表第一个节点;
	OPEN <- OPEN-{x};
	CLOSED<-CLOSED+{x};
	if(x == T)
	  found<-true;
    else
    {
        对节点x进行扩展,其子节点集合为{y1,y2,...,yk};
        for(i=1; i<=k; i++)
        {
            if(yi ¢ OPEN 且 yi ¢ CLOSED)
            {
                PREDyi <- x;
                OPEN <- OPEN + {yi};
                /* BFS加在OPEN表的尾部,DFS加在OPEN表的首部 */
            }
            else
            {
                if(yi经x到达S的代价小于其经PREDyi到达S的代价)
                {
                    PREDyi <- x;
                    if(yi ∈ CLOSED)
                    {
                        CLOSED <- CLOSED - {yi};
                        OPEN <- OPEN + {yi};
                    }
                }
            }
        }
    }
}

你可能感兴趣的:(算法,null,扩展)