在此感谢网友 @北冥有鱼 等网友发现了书中的错误,现在此进行勘误。
“BFS需要遍历整张图”一词并不准确。应该是从要找的路线的起始点开始遍历。并不是整张图的起始点,这里用词不准确。
书中第12页的代码块Search函数需要从
/// <summary>
/// BFS算法;
/// </summary>
/// <param name="origin">开始节点</param>
/// <param name="target">目标点</param>
/// <param name="passNodeList">最短路径列表</param>
public static void Search(Node origin, Node target,ref List<Node> passNodeList)
{
passNodeList.Clear();
for (int i = 1; i < mapLengh; i++)
{
for (int j = 0; j < mapWidth; j++)
{
//如果没有访问该节点,就访问它;
if (!map[i,j].bVisit)
{
BFSSearch(map[i,j],origin,target,ref passNodeList);
}
}
}
// 这里是保存最短路径;
Node curentNode = map[target.X, target.Y];
while (curentNode.Value!=origin.Value)
{
passNodeList.Add(curentNode);
curentNode = curentNode.parent;
}
passNodeList.Add(origin);
}
修改为
/// <summary>
/// BFS算法;
/// </summary>
/// <param name="origin">开始节点</param>
/// <param name="target">目标点</param>
/// <param name="passNodeList">最短路径列表</param>
public static void Search(Node origin, Node target,ref List<Node> passNodeList)
{
passNodeList.Clear();
BFSSearch(origin, origin, target, ref passNodeList);
// 这里是保存最短路径;
Node curentNode = map[target.X, target.Y];
while (curentNode.Value!=origin.Value)
{
passNodeList.Add(curentNode);
curentNode = curentNode.parent;
}
passNodeList.Add(origin);
}
感谢网友 @小小凡仙 网友发现了书中的错误,现在此进行勘误。
85页代码注视部分
并行顺序节点:一False则返回False,全True才返回True
这句话中的顺序应该改为选择