给定起始顶点的图的子图

时间:2011-06-14 20:55:31

标签: algorithm graph

我希望得到一个图的子图,给出顶点开始。连接到起始顶点的所有顶点都被视为应返回的子图的一部分。

我已经解决了这个问题,但我很好奇是否有更有效的解决方案。我想出的解决方案是做一个图的DFS并记录一个集合中遇到的每个顶点,然后,我简单地从原始图中的所有边连接到S和I中的顶点。从中建立了一个子图。原始图中的边缘存储在C#字典中,我认为它基本上是一个哈希值。

DFS和BFS不起作用,因为如果您有两个顶点都具有相同的子节点,则BFS或DFS将不会遍历其中一个边。因此,在这种情况下,子图将包含所有正确的顶点,但是会遗漏一些边缘对。

有没有比我提出的解决方案更好的解决方案?

2 个答案:

答案 0 :(得分:3)

我认为BFS遍历是最有效的算法。

如果您执行BFS并为每个节点排队所有邻居(即遍历连接到当前节点的所有边缘),并且仅在当前节点具有遍历时中止遍历已经被访问过,你可以避免你用“同一个孩子”/“错过的边缘”描述的问题。

答案 1 :(得分:2)

一个“快速”算法,列举所有诱导子图 给定的大小可以在这里找到:

http://theinf1.informatik.uni-jena.de/~wernicke/motifs-wabi2005.pdf

这有帮助吗?