def Tournament(self,n): r""" Returns a tournament on `n` vertices. In this tournament there is an edge from `i` to `j` if `i<j`. INPUT: - ``n`` (integer) -- number of vertices in the tournament. EXAMPLES:: sage: g = digraphs.Tournament(5) sage: g.vertices() [0, 1, 2, 3, 4] sage: g.size() 10 sage: g.automorphism_group().cardinality() 1 """ if n<0: raise ValueError("The number of vertices must be a positive integer.") g = DiGraph() g.name("Tournament on "+str(n)+" vertices") for i in range(n-1): for j in range(i+1, n): g.add_edge(i,j) if n: from sage.graphs.graph_plot import _circle_embedding _circle_embedding(g, range(n)) return g
def Circulant(self, n, integers): r""" Returns a circulant digraph on `n` vertices from a set of integers. INPUT: - ``n`` (integer) -- number of vertices. - ``integers`` -- the list of integers such that there is an edge from `i` to `j` if and only if ``(j-i)%n in integers``. EXAMPLE:: sage: digraphs.Circulant(13,[3,5,7]) Circulant graph ([3, 5, 7]): Digraph on 13 vertices TESTS:: sage: digraphs.Circulant(13,[3,5,7,"hey"]) Traceback (most recent call last): ... ValueError: The list must contain only relative integers. sage: digraphs.Circulant(-2,[3,5,7,3]) Traceback (most recent call last): ... ValueError: n must be a positive integer sage: digraphs.Circulant(3,[3,5,7,3.4]) Traceback (most recent call last): ... ValueError: The list must contain only relative integers. """ from sage.graphs.graph_plot import _circle_embedding from sage.rings.integer_ring import ZZ # Bad input and loops loops = False if not n in ZZ or n <= 0: raise ValueError("n must be a positive integer") for i in integers: if not i in ZZ: raise ValueError( "The list must contain only relative integers.") if (i % n) == 0: loops = True G = DiGraph(n, name="Circulant graph (" + str(integers) + ")", loops=loops) _circle_embedding(G, range(n)) for v in range(n): G.add_edges([(v, (v + j) % n) for j in integers]) return G
def Circulant(self,n,integers): r""" Returns a circulant digraph on `n` vertices from a set of integers. INPUT: - ``n`` (integer) -- number of vertices. - ``integers`` -- the list of integers such that there is an edge from `i` to `j` if and only if ``(j-i)%n in integers``. EXAMPLE:: sage: digraphs.Circulant(13,[3,5,7]) Circulant graph ([3, 5, 7]): Digraph on 13 vertices TESTS:: sage: digraphs.Circulant(13,[3,5,7,"hey"]) Traceback (most recent call last): ... ValueError: The list must contain only relative integers. sage: digraphs.Circulant(-2,[3,5,7,3]) Traceback (most recent call last): ... ValueError: n must be a positive integer sage: digraphs.Circulant(3,[3,5,7,3.4]) Traceback (most recent call last): ... ValueError: The list must contain only relative integers. """ from sage.graphs.graph_plot import _circle_embedding from sage.rings.integer_ring import ZZ # Bad input and loops loops = False if not n in ZZ or n <= 0: raise ValueError("n must be a positive integer") for i in integers: if not i in ZZ: raise ValueError("The list must contain only relative integers.") if (i%n) == 0: loops = True G=DiGraph(n, name="Circulant graph ("+str(integers)+")", loops=loops) _circle_embedding(G, range(n)) for v in range(n): G.add_edges([(v,(v+j)%n) for j in integers]) return G
def RandomTournament(self, n): r""" Returns a random tournament on `n` vertices. For every pair of vertices, the tournament has an edge from `i` to `j` with probability `1/2`, otherwise it has an edge from `j` to `i`. See :wikipedia:`Tournament_(graph_theory)` INPUT: - ``n`` (integer) -- number of vertices. EXAMPLES:: sage: T = digraphs.RandomTournament(10); T Random Tournament: Digraph on 10 vertices sage: T.size() == binomial(10, 2) True sage: digraphs.RandomTournament(-1) Traceback (most recent call last): ... ValueError: The number of vertices cannot be strictly negative! """ from sage.misc.prandom import random g = DiGraph(n) g.name("Random Tournament") for i in range(n - 1): for j in range(i + 1, n): if random() <= 0.5: g.add_edge(i, j) else: g.add_edge(j, i) if n: from sage.graphs.graph_plot import _circle_embedding _circle_embedding(g, range(n)) return g
def TransitiveTournament(self, n): r""" Returns a transitive tournament on `n` vertices. In this tournament there is an edge from `i` to `j` if `i<j`. See :wikipedia:`Tournament_(graph_theory)` INPUT: - ``n`` (integer) -- number of vertices in the tournament. EXAMPLES:: sage: g = digraphs.TransitiveTournament(5) sage: g.vertices() [0, 1, 2, 3, 4] sage: g.size() 10 sage: g.automorphism_group().cardinality() 1 TESTS:: sage: digraphs.TransitiveTournament(-1) Traceback (most recent call last): ... ValueError: The number of vertices cannot be strictly negative! """ g = DiGraph(n) g.name("Transitive Tournament") for i in range(n - 1): for j in range(i + 1, n): g.add_edge(i, j) if n: from sage.graphs.graph_plot import _circle_embedding _circle_embedding(g, range(n)) return g
def RandomTournament(self, n): r""" Returns a random tournament on `n` vertices. For every pair of vertices, the tournament has an edge from `i` to `j` with probability `1/2`, otherwise it has an edge from `j` to `i`. See :wikipedia:`Tournament_(graph_theory)` INPUT: - ``n`` (integer) -- number of vertices. EXAMPLES:: sage: T = digraphs.RandomTournament(10); T Random Tournament: Digraph on 10 vertices sage: T.size() == binomial(10, 2) True sage: digraphs.RandomTournament(-1) Traceback (most recent call last): ... ValueError: The number of vertices cannot be strictly negative! """ from sage.misc.prandom import random g = DiGraph(n) g.name("Random Tournament") for i in range(n - 1): for j in range(i + 1, n): if random() <= .5: g.add_edge(i, j) else: g.add_edge(j, i) if n: from sage.graphs.graph_plot import _circle_embedding _circle_embedding(g, range(n)) return g
def Tournament(self, n): r""" Returns a tournament on `n` vertices. In this tournament there is an edge from `i` to `j` if `i<j`. INPUT: - ``n`` (integer) -- number of vertices in the tournament. EXAMPLES:: sage: g = digraphs.Tournament(5) sage: g.vertices() [0, 1, 2, 3, 4] sage: g.size() 10 sage: g.automorphism_group().cardinality() 1 """ if n < 0: raise ValueError( "The number of vertices must be a positive integer.") g = DiGraph() g.name("Tournament on " + str(n) + " vertices") for i in range(n - 1): for j in range(i + 1, n): g.add_edge(i, j) if n: from sage.graphs.graph_plot import _circle_embedding _circle_embedding(g, range(n)) return g