【问题标题】:Finding cycles with a stack-based depth first search使用基于堆栈的深度优先搜索查找循环
【发布时间】:2012-01-17 08:04:43
【问题描述】:

我知道您使用 DFS 的递归实现,其中所有节点都以白色开始,第一次遇到时显示为灰色,并在探索完所有子节点后显示为黑色,如果您知道有一个循环遇到过灰色节点。

但是如何通过堆栈实现来做到这一点?

【问题讨论】:

  • 欢迎来到 Stackoverflow!您的第一次编码尝试?你是什​​么编程语言?通过避免提出模糊的问题,您可能会得到更有价值的答案。请详细说明!

标签: recursion graph stack depth-first-search


【解决方案1】:

This Stackoverflow 上的答案指向 Java 代码 sample 使用堆栈实现 DFS。

另外,如果你对 C 感到满意,我希望你也像我一样喜欢 chess,我强烈建议你研究一下 Andy DuPlain 在公共领域发布的 fbk2rbm 的源代码。

这是一个方便的实用程序,可以将Fritz power-books 转换为Rebel 7 格式(用国际象棋的说法打开图书馆)。

它利用stack,象棋移动蜂被视为节点。

摘录:

...

/* Used to hold move */
struct Move {
  char FromFile, FromRank;
  char ToFile, ToRank;
  unsigned char Eval;
  char StartVar;    
};

/* List of moves seen */
struct Move Moves[256]; 

...

扩展程序以解决位置循环检测(考虑到不同的移动序列可能导致相同的位置/碰撞)将是与您的问题相关的一个很好的练习。

【讨论】:

  • 你所做的只是说扩展 DFS 来回答这个问题将是一个很好的练习,这就是问题所在!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多