Ticket #12355: trac_12355.patch

File trac_12355.patch, 3.1 KB (added by ncohen, 2 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: