我知道你使用DFS的递归实现,其中所有节点都以白色开始,在第一次遇到它们时都是灰色的,并且在他们所有的孩子被探索后都是黑色的,你知道如果你有一个周期曾遇到灰色节点。
但是如何使用堆栈实现呢?
答案 0 :(得分:-1)
This回答指向使用堆栈实现DFS的Java代码sample。
此外,如果您对C感到满意并且我希望您也喜欢chess,我强烈建议您学习Andy DuPlain在公共领域发布的fbk2rbm源代码。
将Fritz电子书转换为Rebel 7格式(以国际象棋用语打开图书馆)是一个方便的实用程序。
它利用堆栈,国际象棋移动被视为节点。
摘录:
...
/* 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];
...
将程序扩展到地址位置圆柱检测(假设不同的移动顺序可能会导致相同的位置/碰撞)将是与您的问题相关的一个很好的练习。