伪代码中的回溯深度优先搜索算法

发布于 2024-11-07 21:51:20 字数 332 浏览 3 评论 0原文

boolean backtrackDFS(v)  {
   If  (SolutionFound(v))  return true;
   Mark vertex v as reached.
   for (each unreached vertex u adjacenct from v)
        if (backtrakDFS(u)) return true;
   Unmark vertex v; 
   return false;
}

这里为什么需要Unmark vertex v? 为什么添加这样的行是安全的,因此 v 再次无法到达,会导致重新访问吗?

boolean backtrackDFS(v)  {
   If  (SolutionFound(v))  return true;
   Mark vertex v as reached.
   for (each unreached vertex u adjacenct from v)
        if (backtrakDFS(u)) return true;
   Unmark vertex v; 
   return false;
}

Here why Unmark vertex v is needed?
and why is it safe to add such line as hence v becomes unreached again, would it result in revisit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遗忘曾经 2024-11-14 21:51:20

我认为没有必要。通常,撤消所做的事情并让事情保持原样是你发现它们时的好习惯。

例如,包含该行将允许您多次使用相同的函数进行搜索,而无需单独的操作来清除标记。

I don't think it's needed. It's usually just good practice to undo what you do, and leave things as they were when you found them.

For example, including that line would allow you to search using the same function more than once without a separate operation to clear the marks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文