def connected_components(self,edge_list=None): """ The list of connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. """ if edge_list==None: return DiGraph.connected_components(self) components=[] vertices=[] for e in edge_list: v=self.initial_vertex(e) vv=self.terminal_vertex(e) t=[i for i in xrange(len(components)) if v in vertices[i] or vv in vertices[i]] if len(t)==0: components.append([e]) if v!=vv: vertices.append([v,vv]) else: vertices.append([v]) elif len(t)==1: components[t[0]].append(e) if v not in vertices[t[0]]: vertices[t[0]].append(v) elif vv not in vertices[t[0]]: vertices[t[0]].append(vv) elif len(t)==2: components[t[0]]=components[t[0]]+components[t[1]]+[e] vertices[t[0]]=vertices[t[0]]+vertices[t[1]] components.pop(t[1]) vertices.pop(t[1]) return components
def connected_components(self, edge_list=None): """ The list of connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. """ if edge_list == None: return DiGraph.connected_components(self) components = [] vertices = [] for e in edge_list: v = self.initial_vertex(e) vv = self.terminal_vertex(e) t = [ i for i in xrange(len(components)) if v in vertices[i] or vv in vertices[i] ] if len(t) == 0: components.append([e]) if v != vv: vertices.append([v, vv]) else: vertices.append([v]) elif len(t) == 1: components[t[0]].append(e) if v not in vertices[t[0]]: vertices[t[0]].append(v) elif vv not in vertices[t[0]]: vertices[t[0]].append(vv) elif len(t) == 2: components[t[0]] = components[t[0]] + components[t[1]] + [e] vertices[t[0]] = vertices[t[0]] + vertices[t[1]] components.pop(t[1]) vertices.pop(t[1]) return components
def connected_components(self, edge_list=None): """ The list of connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. INPUT: - ``edge_list`` -- (default: ``None``) list of edge OUTPUT: List of Connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. EXAMPLES:: sage: from train_track.inverse_graph import GraphWithInverses sage: G = GraphWithInverses([[0,0,'a'],[0,0,'b'],[1,1,'c']]) sage: G.connected_components() [[0], [1]] """ if edge_list is None: return DiGraph.connected_components(self) components = [] vertices = [] for e in edge_list: v = self.initial_vertex(e) vv = self.terminal_vertex(e) t = [ i for i in range(len(components)) if v in vertices[i] or vv in vertices[i] ] if len(t) == 0: components.append([e]) if v != vv: vertices.append([v, vv]) else: vertices.append([v]) elif len(t) == 1: components[t[0]].append(e) if v not in vertices[t[0]]: vertices[t[0]].append(v) elif vv not in vertices[t[0]]: vertices[t[0]].append(vv) elif len(t) == 2: components[t[0]] = components[t[0]] + components[t[1]] + [e] vertices[t[0]] = vertices[t[0]] + vertices[t[1]] components.pop(t[1]) vertices.pop(t[1]) return components
def connected_components(self, edge_list=None): """ The list of connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. INPUT: - ``edge_list`` -- (default: ``None``) list of edge OUTPUT: List of Connected components (each as a list of edges) of the subgraph of ``self`` spanned by ``edge_list``. EXAMPLES:: sage: from train_track.inverse_graph import GraphWithInverses sage: G = GraphWithInverses([[0,0,'a'],[0,0,'b'],[1,1,'c']]) sage: G.connected_components() [[0], [1]] """ if edge_list is None: return DiGraph.connected_components(self) components = [] vertices = [] for e in edge_list: v = self.initial_vertex(e) vv = self.terminal_vertex(e) t = [i for i in range(len(components)) if v in vertices[i] or vv in vertices[i]] if len(t) == 0: components.append([e]) if v != vv: vertices.append([v, vv]) else: vertices.append([v]) elif len(t) == 1: components[t[0]].append(e) if v not in vertices[t[0]]: vertices[t[0]].append(v) elif vv not in vertices[t[0]]: vertices[t[0]].append(vv) elif len(t) == 2: components[t[0]] = components[t[0]] + components[t[1]] + [e] vertices[t[0]] = vertices[t[0]] + vertices[t[1]] components.pop(t[1]) vertices.pop(t[1]) return components