如何在DFS上写下这篇写得不好的文章?

时间:2011-04-26 09:57:49

标签: algorithm depth-first-search

作为一个没有英语作为母语(俄罗斯)的人,我在维基百科上阅读了这篇文章:http://en.wikibooks.org/wiki/Artificial_Intelligence/Search/Heuristic_search/Depth-first_search

我尝试按照这个用硬核英语编写的伪代码示例,但没有任何解释或评论。

特别是,我没有得到他们试图用这句话说的话:

DFS(u):

visit(u);
time = time + 1;
d[u] = time;
color[u] = grey;

for all nodes v adjacent to u do
   if color[v] == white then
      p[v] = u;
       DFS(u);


time = time + 1;
f[u] = time;
color[u] = black;
对于与您相邻的所有节点v

我对这句话的问题是“相邻”部分。我的字典说这意味着“邻居”。所以我必须迭代你超级节点的子节点?请注意,u是图中的一个节点。

或者他们是否试图说我必须遍历你的所有子节点?因为这会产生巨大的差异。

除了那些英语问题,他们忘记提及 d p 的意思,这让我全身心投入(是的,甚至是那些来自我胡子的人)。< / p>

文章中的链接只是重复这个不太讲的神秘内容。也许有人能够以更人性化的方式重新编写这个,有更多的评论和有意义的变量?我没有找到任何真正好的解释,不仅仅是为了展示作家与DFS相关的主导情报。

因此,如果有人能够以更好的方式重新编写,并且学习价值更高,可以节省我的一天,请保存我的小胡子。保存一切。谢谢。

3 个答案:

答案 0 :(得分:2)

这意味着:“对于直接连接到u的所有节点v。”

http://en.wikipedia.org/wiki/Depth-first_search中的伪代码更简单。希望这个对你有用。

如果我没记错的话,dpf来自Cormen关于算法的书。它们分别表示发现节点的时刻,DFS遍历树上的前一节点以及节点完成的时刻。其中一些对某些应用程序很有用(例如拓扑排序,查找DFS周围的组件和其他算法),但它们对DFS本身并不重要。

答案 1 :(得分:2)

similar question的代码可能对您有所帮助:

#A tree is a tuple of an int and a tree. 
t = (1, (2,(4, (6), (7, (9)) )), (3, (5, (8)) ))

def dfs(t):
    if type(t) is int:
        print t
        return 
    print t[0]
    dfs(t[1])
    if len(t) > 2: dfs(t[2]) 

dfs(t)

答案 2 :(得分:1)

当语言障碍在你身上时,我的责备会少一些 侧。

无论如何,“邻近”意味着直接连接。在此图表中:

    A   E
   / \ /
  B   C
       \
        D

ABC相邻,BA相邻,C相邻 至AEDDC相邻,EC相邻。< / p>

这是相同的代码,有点冗长:

{with the following global variable:
    time, which is a single integer, and initially 0;}

{and a node being a structure of:
    value;
    adjacent-nodes;
    colour, initially white;
    previous-node;
    discovery-time;
    finishing-time;}

{depth-first-search of node u is:
    visit the value of u;
    increase time by 1;
    set the discovery-time of u to time;
    set the colour of u to grey;

    {for all nodes v in the adjacent-nodes of u:
        {if the colour of v is white then:
            set the previous-node of v to u;
            depth-first-search of v;}}

    increase time by 1;
    set the finishing-time of u to time;
    set the colour of u to black;}

此代码中有几件事情纯粹是说明性的 目的。中心主题是:

{with a node being a structure of:
    value;
    adjacent-nodes;
    colour, initially white;}

{depth-first-search of node u is:
    visit the value of u;
    set the colour of u to black;

    {for all nodes v in the adjacent-nodes of u:
        {if the colour of v is white then:
            depth-first-search of v;}}}