我正在分析一些代码的依赖关系。比方说,有一些交织的依赖,就像这样:将循环图减少为树(依赖关系图 - >树)
F
A /|
| /|
| /|
V < V
B<--->C--->E
\ / |
> < |
D<------+
B依赖于A和C ,c取决于B和F Ë取决于C和F d取决于B和C和E
我们对B和C有个问题,他们互相依赖。它们应该组合成一个超级节点。 C和E和F有问题,他们有一个循环。它们应该组合成一个超级节点。
你最终会与
A
|
V
super
node
|
|
D
是否有一个好的图书馆或算法源(Java者优先,但开放的建议),允许这样的减少?
一个循环中的任何节点都组合成一个节点。指向新节点中任何节点的任何节点都应该指向新节点。新节点中任何节点指向的任何节点都应该使新节点指向该节点。
谢谢!
事实上,这正是我正在寻找的。 Tarjan的算法看起来很简单,足以实现我自己,但如果你有他们的Java实现,我会很乐意接受链接。 – corsiKa 2011-04-01 00:01:34
对不起,我没有。我觉得像算法,因为我知道它是有点不同于维基页面,没有堆栈...希望别人会拥有它? – usul 2011-04-01 00:07:38
其实,维基百科有一个链接。当然,这是wiki,所以风险自负。祝你好运! http://algowiki.net/wiki/index.php?title=Tarjan%27s_algorithm – usul 2011-04-01 00:08:40