Ticket #12355: trac_12355.patch

File trac_12355.patch, 3.1 KB (added by ncohen, 4 years ago)
  • sage/graphs/generic_graph.py

    # HG changeset patch
    # User Nathann Cohen <nathann.cohen@gmail.com>
    # Date 1327491226 -3600
    # Node ID 319a2a04c664c9883b7e38bd22c7d55dd65791a2
    # Parent  b4d18004fc71f2804ab58a8c505531e312c303df
    trac 12355 -- Bug in Graph.girth
    
    diff --git a/sage/graphs/generic_graph.py b/sage/graphs/generic_graph.py
    a b  
    1126411264        """
    1126511265        Computes the girth of the graph. For directed graphs, computes the
    1126611266        girth of the undirected graph.
    11267        
     11267
    1126811268        The girth is the length of the shortest cycle in the graph. Graphs
    1126911269        without cycles have infinite girth.
    11270        
    11271         EXAMPLES::
    11272        
     11270
     11271        EXAMPLES::
     11272
    1127311273            sage: graphs.TetrahedralGraph().girth()
    1127411274            3
    1127511275            sage: graphs.CubeGraph(3).girth()
     
    1128011280            6
    1128111281            sage: graphs.trees(9).next().girth()
    1128211282            +Infinity
    11283            
     11283
    1128411284        TESTS:
    11285        
     11285
    1128611286        Prior to Trac #12243, the girth computation assumed
    1128711287        vertices were integers (and failed).  The example below
    1128811288        tests the computation for graphs with vertices that are
    1128911289        not integers.  In this example the vertices are sets.  ::
    11290        
     11290
    1129111291            sage: G = graphs.OddGraph(3)
    1129211292            sage: type(G.vertices()[0])
    1129311293            <class 'sage.sets.set.Set_object_enumerated_with_category'>
    1129411294            sage: G.girth()
    11295             5       
    11296         """
     11295            5
     11296
     11297        Ticket :trac:`12355`::
     11298
     11299            sage: H=Graph([(0, 1), (0, 3), (0, 4), (0, 5), (1, 2), (1, 3), (1, 4), (1, 6), (2, 5), (3, 4), (5, 6)])
     11300            sage: H.girth()
     11301            3
     11302
     11303        Girth < 3 (see :trac:`12355`)::
     11304
     11305           sage: g = graphs.PetersenGraph()
     11306           sage: g.allow_multiple_edges(True)
     11307           sage: g.allow_loops(True)
     11308           sage: g.girth()
     11309           5
     11310           sage: g.add_edge(0,0)
     11311           sage: g.girth()
     11312           1
     11313           sage: g.delete_edge(0,0)
     11314           sage: g.add_edge(0,1)
     11315           sage: g.girth()
     11316           2
     11317           sage: g.delete_edge(0,1)
     11318           sage: g.girth()
     11319           5
     11320           sage: g = DiGraph(g)
     11321           sage: g.girth()
     11322           2
     11323        """
     11324
     11325        # Cases where girth <= 2
     11326        if self.has_loops():
     11327            return 1
     11328        if self.is_directed():
     11329            if any(self.has_edge(v,u) for u,v in self.edges(labels = False)):
     11330                return 2
     11331        else:
     11332            if self.has_multiple_edges():
     11333                return 2
     11334
    1129711335        n = self.num_verts()
    1129811336        best = n+1
    1129911337        seen = {}
     
    1131311351                        else:
    1131411352                            if u in thisList:
    1131511353                                best = depth*2-1
     11354                                thislList = set()
    1131611355                                break
    1131711356                            if u in nextList:
    1131811357                                best = depth*2
     11358                    if best == 2*depth-1:
     11359                        break
    1131911360                thisList = nextList
    1132011361                depth += 1
    1132111362        if best == n+1: