G 值与 Parent 回溯
A* 先用 F = G + H 选择最值得检查的候选格,找到终点后,再沿 Parent 指针逐步回到起点。
while (open.Count > 0){var current = open.MinBy(n => n.F);open.Remove(current);closed.Add(current);if (current == goal) Backtrack(current);foreach (var next in Neighbors(current)){var newG = current.G + 1;if (newG >= next.G) continue;next.G = newG;next.Parent = current;open.AddOrUpdate(next);}}
A* 会重复“选择最优节点”和“展开邻居”两个阶段。每次点击只执行一个阶段。