or v not in member.get_neighbors()): break else: clique.add(v) q.append(v) self.cliques.add(frozenset(clique)) def count(self): return len(self.cliques) def get_cliques(self): return self.cliques if __name__ == "__main__": g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_vertex(8) g.add_vertex(9) g.add_vertex(10) g.add_vertex(11) # 4 cliques in total, of size, 3, 2, 4, and 3 g.add_edge(1, 2) g.add_edge(2, 1)
v.marked = True v.id = self.component q.append(v) def count(self): return self.component def id(self, node): return self.G.get_vertex(node).id def connected(self, node_a, node_b): return self.id(node_a) == self.id(node_b) if __name__ == "__main__": g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_edge(1, 2, both=True) g.add_edge(2, 4, both=True) g.add_edge(2, 6, both=True) g.add_edge(3, 5, both=True) cc = CC(g)
v.id = self.component q.append(v) def count(self): return self.component def id(self, node): return self.G.get_vertex(node).id def connected(self, node_a, node_b): return self.id(node_a) == self.id(node_b) if __name__ == '__main__': g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_edge(1,2, both=True) g.add_edge(2,4, both=True) g.add_edge(2,6, both=True) g.add_edge(3,5, both=True)
break else: clique.add(v) q.append(v) self.cliques.add(frozenset(clique)) def count(self): return len(self.cliques) def get_cliques(self): return self.cliques if __name__ == '__main__': g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_vertex(8) g.add_vertex(9) g.add_vertex(10) g.add_vertex(11) # 4 cliques in total, of size, 3, 2, 4, and 3 g.add_edge(1,2)
def __init__(self, G): self.G = G self.post = [] for v in G: v.marked = False for v in G: if not v.marked: self.dfs(G, v) def dfs(self, G, source): source.marked = True for v in source.get_neighbors(): if not v.marked: self.dfs(G, v) self.post.append(source) def __iter__(self): return iter(reversed(self.post)) if __name__ == '__main__': g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7)
v.marked = True v.id = self.component q.append(v) def count(self): return self.component def id(self, node): return self.G.get_vertex(node).id def connected(self, node_a, node_b): return self.id(node_a) == self.id(node_b) if __name__ == "__main__": g = UnweightedGraph() g.add_vertex(0) g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_vertex(8) g.add_vertex(9) g.add_vertex(10) g.add_vertex(11) g.add_vertex(12) # 5 strongly connected components
def __init__(self, G): self.G = G self.post = [] for v in G: v.marked = False for v in G: if not v.marked: self.dfs(G, v) def dfs(self, G, source): source.marked = True for v in source.get_neighbors(): if not v.marked: self.dfs(G, v) self.post.append(source) def __iter__(self): return iter(reversed(self.post)) if __name__ == "__main__": g = UnweightedGraph() g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7)
v.id = self.component q.append(v) def count(self): return self.component def id(self, node): return self.G.get_vertex(node).id def connected(self, node_a, node_b): return self.id(node_a) == self.id(node_b) if __name__ == '__main__': g = UnweightedGraph() g.add_vertex(0) g.add_vertex(1) g.add_vertex(2) g.add_vertex(3) g.add_vertex(4) g.add_vertex(5) g.add_vertex(6) g.add_vertex(7) g.add_vertex(8) g.add_vertex(9) g.add_vertex(10) g.add_vertex(11) g.add_vertex(12) # 5 strongly connected components