/*
节点深度:根节点指示初始状态,令其节点深度为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};
}
}
}
}
}
}
一般图搜索算法
最新推荐文章于 2024-08-16 22:05:05 发布