对于未经指示的图表,可在O(n)时间进行,并配有简单的每日生活津贴。 在这方面:
定义<代码>explore,作为从某一天起可达到的所有节点的程序。 这只是一种反省式的程序,在每一个节点,你发现这个节点的所有孩子,把他们推向上。
为了找到答案,从外勤支助部开始,并启动<代码>explore关于该术语的程序。 保持分类(编号为<>cc)并将之通过<代码>explore程序。 此外,还保留一个海图/字典,或将地图cc
贴在相应的代号上。 在<代码>explore程序的每一层次,目前将目前的节点绘制为cc<>/code>。 每当探索程序被重新采用时,其数值即为<条码>。
每次<代码>explore 返回外勤部的路程,加固<条码> cc<>>>>/代码,并随时间予以通过。 一旦与整个外勤部一起工作,你就会有一张字典,每个线标有相应的连接部分。 在这一程序结束时,<代码>cc的价值可向您提供图表中的相关部分。
The pseudo-code:
function explore(node, graph, cc, map){
map(currentNode) = cc
//find all children of current node, and push onto stack.
//mark current node as visited
for i in stack:
explore(i, graph, cc, map)
}
function DFS{
int cc = -1
for node in keysOfGraph:
if not visited:
cc++
explore(node, graph, cc, map)
return cc
}
http://www.cs.berkeley.edu/~vazirani/algorithms/chap3.pdf”rel=“nofollow”>Dasgupta Algorithms (第3.2.3节)