作为一个没有英语作为母语(俄罗斯)的人,我在维基百科上阅读了这篇文章: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相关的主导情报。
因此,如果有人能够以更好的方式重新编写,并且学习价值更高,可以节省我的一天,请保存我的小胡子。保存一切。谢谢。
答案 0 :(得分:2)
这意味着:“对于直接连接到u的所有节点v。”
http://en.wikipedia.org/wiki/Depth-first_search中的伪代码更简单。希望这个对你有用。
如果我没记错的话,d
,p
和f
来自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
A
与B
和C
相邻,B
与A
相邻,C
相邻
至A
,E
和D
,D
与C
相邻,E
与C
相邻。< / 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;}}}