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
示例#2
0
 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
示例#3
0
    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