def bipartite_graph(self): r""" Construct a ``BipartiteGraph`` Object of the game. This method is similar to the plot method. Note that the game must be solved for this to work. EXAMPLES: An error is returned if the game is not solved:: sage: suit = {0: (3, 4), ....: 1: (3, 4)} sage: revr = {3: (0, 1), ....: 4: (1, 0)} sage: g = MatchingGame([suit, revr]) sage: g.bipartite_graph() Traceback (most recent call last): ... ValueError: game has not been solved yet sage: g.solve() {0: 3, 1: 4} sage: g.bipartite_graph() Bipartite graph on 4 vertices """ self._is_solved() graph = BipartiteGraph(self._sol_dict) return graph
def incidence_graph(self): """ Returns the incidence graph of the design, where the incidence matrix of the design is the adjacency matrix of the graph. EXAMPLE:: sage: BD = IncidenceStructure(range(7),[[0,1,2],[0,3,4],[0,5,6],[1,3,5],[1,4,6],[2,3,6],[2,4,5]]) sage: BD.incidence_graph() Bipartite graph on 14 vertices sage: A = BD.incidence_matrix() sage: Graph(block_matrix([[A*0,A],[A.transpose(),A*0]])) == BD.incidence_graph() True REFERENCE: - Sage Reference Manual on Graphs """ from sage.graphs.bipartite_graph import BipartiteGraph A = self.incidence_matrix() return BipartiteGraph(A)
def DegreeSequenceBipartite(s1, s2): r""" Returns a bipartite graph whose two sets have the given degree sequences. Given two different sequences of degrees `s_1` and `s_2`, this functions returns ( if possible ) a bipartite graph on sets `A` and `B` such that the vertices in `A` have `s_1` as their degree sequence, while `s_2` is the degree sequence of the vertices in `B`. INPUT: - ``s_1`` -- list of integers corresponding to the degree sequence of the first set. - ``s_2`` -- list of integers corresponding to the degree sequence of the second set. ALGORITHM: This function works through the computation of the matrix given by the Gale-Ryser theorem, which is in this case the adjacency matrix of the bipartite graph. EXAMPLES: If we are given as sequences ``[2,2,2,2,2]`` and ``[5,5]`` we are given as expected the complete bipartite graph `K_{2,5}` :: sage: g = graphs.DegreeSequenceBipartite([2,2,2,2,2],[5,5]) sage: g.is_isomorphic(graphs.CompleteBipartiteGraph(5,2)) True Some sequences being incompatible if, for example, their sums are different, the functions raises a ``ValueError`` when no graph corresponding to the degree sequences exists. :: sage: g = graphs.DegreeSequenceBipartite([2,2,2,2,1],[5,5]) Traceback (most recent call last): ... ValueError: There exists no bipartite graph corresponding to the given degree sequences TESTS: :trac:`12155`:: sage: graphs.DegreeSequenceBipartite([2,2,2,2,2],[5,5]).complement() Graph on 7 vertices """ from sage.combinat.integer_vector import gale_ryser_theorem from sage.graphs.bipartite_graph import BipartiteGraph s1 = sorted(s1, reverse=True) s2 = sorted(s2, reverse=True) m = gale_ryser_theorem(s1, s2) if m is False: raise ValueError( "There exists no bipartite graph corresponding to the given degree sequences" ) else: return Graph(BipartiteGraph(m))