本文整理汇总了Python中sage.graphs.graph.Graph.add_vertex方法的典型用法代码示例。如果您正苦于以下问题:Python Graph.add_vertex方法的具体用法?Python Graph.add_vertex怎么用?Python Graph.add_vertex使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.graphs.graph.Graph
的用法示例。
在下文中一共展示了Graph.add_vertex方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: to_undirected_graph
# 需要导入模块: from sage.graphs.graph import Graph [as 别名]
# 或者: from sage.graphs.graph.Graph import add_vertex [as 别名]
def to_undirected_graph(self):
r"""
Return the undirected graph obtained from the tree nodes and edges.
The graph is endowed with an embedding, so that it will be displayed
correctly.
EXAMPLES::
sage: t = OrderedTree([])
sage: t.to_undirected_graph()
Graph on 1 vertex
sage: t = OrderedTree([[[]],[],[]])
sage: t.to_undirected_graph()
Graph on 5 vertices
If the tree is labelled, we use its labelling to label the graph. This
will fail if the labels are not all distinct.
Otherwise, we use the graph canonical labelling which means that
two different trees can have the same graph.
EXAMPLES::
sage: t = OrderedTree([[[]],[],[]])
sage: t.canonical_labelling().to_undirected_graph()
Graph on 5 vertices
TESTS::
sage: t.canonical_labelling().to_undirected_graph() == t.to_undirected_graph()
False
sage: OrderedTree([[],[]]).to_undirected_graph() == OrderedTree([[[]]]).to_undirected_graph()
True
sage: OrderedTree([[],[],[]]).to_undirected_graph() == OrderedTree([[[[]]]]).to_undirected_graph()
False
"""
from sage.graphs.graph import Graph
g = Graph()
if self in LabelledOrderedTrees():
relabel = False
else:
self = self.canonical_labelling()
relabel = True
roots = [self]
g.add_vertex(name=self.label())
emb = {self.label(): []}
while roots:
node = roots.pop()
children = reversed([child.label() for child in node])
emb[node.label()].extend(children)
for child in node:
g.add_vertex(name=child.label())
emb[child.label()] = [node.label()]
g.add_edge(child.label(), node.label())
roots.append(child)
g.set_embedding(emb)
if relabel:
g = g.canonical_label()
return g
示例2: CayleyGraph
# 需要导入模块: from sage.graphs.graph import Graph [as 别名]
# 或者: from sage.graphs.graph.Graph import add_vertex [as 别名]
def CayleyGraph(vspace, gens, directed=False):
"""
Generate a Cayley Graph over given vector space with edges
generated by given generators. The graph is optionally directed.
Try e.g. CayleyGraph(VectorSpace(GF(2), 3), [(1,0,0), (0,1,0), (0,0,1)])
"""
G = Graph()
for v in vspace:
G.add_vertex(tuple(v))
for g in gens:
g2 = vspace(g)
G.add_edge(tuple(v), tuple(v + g2))
return G
示例3: to_undirected_graph
# 需要导入模块: from sage.graphs.graph import Graph [as 别名]
# 或者: from sage.graphs.graph.Graph import add_vertex [as 别名]
def to_undirected_graph(self):
r"""
Return the undirected graph obtained from the tree nodes and edges.
EXAMPLES::
sage: t = OrderedTree([])
sage: t.to_undirected_graph()
Graph on 1 vertex
sage: t = OrderedTree([[[]],[],[]])
sage: t.to_undirected_graph()
Graph on 5 vertices
If the tree is labelled, we use its labelling to label the graph.
Otherwise, we use the graph canonical labelling which means that
two different trees can have the same graph.
EXAMPLES::
sage: t = OrderedTree([[[]],[],[]])
sage: t.canonical_labelling().to_undirected_graph()
Graph on 5 vertices
sage: t.canonical_labelling().to_undirected_graph() == t.to_undirected_graph()
False
sage: OrderedTree([[],[]]).to_undirected_graph() == OrderedTree([[[]]]).to_undirected_graph()
True
sage: OrderedTree([[],[],[]]).to_undirected_graph() == OrderedTree([[[[]]]]).to_undirected_graph()
False
"""
from sage.graphs.graph import Graph
g = Graph()
if self in LabelledOrderedTrees():
relabel = False
else:
self = self.canonical_labelling()
relabel = True
roots = [self]
g.add_vertex(name=self.label())
while len(roots) != 0:
node = roots.pop()
for child in node:
g.add_vertex(name=child.label())
g.add_edge(child.label(), node.label())
roots.append(child)
if relabel:
g = g.canonical_label()
return g
示例4: ChessboardGraphGenerator
# 需要导入模块: from sage.graphs.graph import Graph [as 别名]
# 或者: from sage.graphs.graph.Graph import add_vertex [as 别名]
#.........这里部分代码省略.........
Traceback (most recent call last):
...
ValueError: The knight_x and knight_y values must be integers of value >= 1.
"""
from sage.rings.integer_ring import ZZ
# We decode the dimensions of the chessboard
try:
dim = list(dim_list)
nb_dim = len(dim)
except TypeError:
raise TypeError('The first parameter must be an iterable object.')
if nb_dim < 2:
raise ValueError('The chessboard must have at least 2 dimensions.')
if any(a not in ZZ or a < 1 for a in dim):
raise ValueError('The dimensions must be positive integers larger than 1.')
dimstr = str(tuple(dim))
# We check the radius toward neighbors
if rook:
if rook_radius is None:
rook_radius = max(dim)
elif not rook_radius in ZZ or rook_radius < 1:
raise ValueError('The rook_radius must be either None or have an integer value >= 1.')
if bishop:
if bishop_radius is None:
bishop_radius = max(dim)
elif not bishop_radius in ZZ or bishop_radius < 1:
raise ValueError('The bishop_radius must be either None or have an integer value >= 1.')
if knight and ( not knight_x in ZZ or not knight_y in ZZ or knight_x < 1 or knight_y < 1 ):
raise ValueError('The knight_x and knight_y values must be integers of value >= 1.')
# We build the set of vertices of the d-dimensionnal chessboard
from itertools import product
V = [list(x) for x in list(product(*[range(_) for _ in dim]))]
from sage.combinat.combination import Combinations
combin = Combinations(range(nb_dim),2)
from sage.graphs.graph import Graph
G = Graph()
for u in V:
uu = tuple(u)
G.add_vertex(uu)
if rook:
# We add edges to vertices we can reach when moving in one dimension
for d in xrange(nb_dim):
v = u[:]
for k in xrange(v[d]+1, min(dim[d],v[d]+1+rook_radius)):
v[d] = k
G.add_edge( uu, tuple(v) )
if bishop or knight:
# We add edges to vertices we can reach when moving in two dimensions
for dx,dy in combin:
n = dim[dx]
m = dim[dy]
v = u[:]
i = u[dx]
j = u[dy]
if bishop:
# Diagonal
for k in xrange(1, min(n-i,m-j,bishop_radius+1)):
v[dx] = i+k
v[dy] = j+k
G.add_edge( uu, tuple(v) )
# Anti-diagonal
for k in xrange(min(i, m-j-1, bishop_radius)):
v[dx] = i-k-1
v[dy] = j+k+1
G.add_edge( uu, tuple(v) )
if knight:
# Moving knight_x in one dimension and knight_y in another
# dimension
if i+knight_y < n:
if j+knight_x < m:
v[dx] = i+knight_y
v[dy] = j+knight_x
G.add_edge( uu, tuple(v) )
if j-knight_x >= 0:
v[dx] = i+knight_y
v[dy] = j-knight_x
G.add_edge( uu, tuple(v) )
if j+knight_y < m:
if i+knight_x < n:
v[dx] = i+knight_x
v[dy] = j+knight_y
G.add_edge( uu, tuple(v) )
if i-knight_x >= 0:
v[dx] = i-knight_x
v[dy] = j+knight_y
G.add_edge( uu, tuple(v) )
if relabel:
G.relabel( inplace=True )
return G, dimstr
示例5: GridGraph
# 需要导入模块: from sage.graphs.graph import Graph [as 别名]
# 或者: from sage.graphs.graph.Graph import add_vertex [as 别名]
def GridGraph(dim_list):
"""
Returns an n-dimensional grid graph.
INPUT:
- ``dim_list`` - a list of integers representing the
number of nodes to extend in each dimension.
PLOTTING: When plotting, this graph will use the default
spring-layout algorithm, unless a position dictionary is
specified.
EXAMPLES::
sage: G = graphs.GridGraph([2,3,4])
sage: G.show() # long time
::
sage: C = graphs.CubeGraph(4)
sage: G = graphs.GridGraph([2,2,2,2])
sage: C.show() # long time
sage: G.show() # long time
TESTS:
The graph name contains the dimension::
sage: g = graphs.GridGraph([5, 7])
sage: g.name()
'Grid Graph for [5, 7]'
sage: g = graphs.GridGraph([2, 3, 4])
sage: g.name()
'Grid Graph for [2, 3, 4]'
sage: g = graphs.GridGraph([2, 4, 3])
sage: g.name()
'Grid Graph for [2, 4, 3]'
One dimensional grids (i.e., path) have simple vertex labels::
sage: g = graphs.GridGraph([5])
sage: g.vertices()
[0, 1, 2, 3, 4]
The graph is correct::
sage: dim = [randint(1,4) for i in range(4)]
sage: g = graphs.GridGraph(dim)
sage: import networkx
sage: h = Graph( networkx.grid_graph(list(dim)) )
sage: g.is_isomorphic(h)
True
Trivial cases::
sage: g = graphs.GridGraph([]); g; g.vertices()
Grid Graph for []: Graph on 0 vertices
[]
sage: g = graphs.GridGraph([1]); g; g.vertices()
Grid Graph for [1]: Graph on 1 vertex
[0]
sage: g = graphs.GridGraph([2]); g; g.vertices()
Grid Graph for [2]: Graph on 2 vertices
[0, 1]
sage: g = graphs.GridGraph([1,1]); g; g.vertices()
Grid Graph for [1, 1]: Graph on 1 vertex
[(0, 0)]
sage: g = graphs.GridGraph([1, 1, 1]); g; g.vertices()
Grid Graph for [1, 1, 1]: Graph on 1 vertex
[(0, 0, 0)]
sage: g = graphs.GridGraph([1,1,2]); g; g.vertices()
Grid Graph for [1, 1, 2]: Graph on 2 vertices
[(0, 0, 0), (0, 0, 1)]
All dimensions must be positive integers::
sage: g = graphs.GridGraph([2,-1,3])
Traceback (most recent call last):
...
ValueError: All dimensions must be positive integers !
"""
dim = [int(a) for a in dim_list]
if any(a <= 0 for a in dim):
raise ValueError("All dimensions must be positive integers !")
g = Graph()
n_dim = len(dim)
if n_dim==1:
# Vertices are labeled from 0 to dim[0]-1
g = PathGraph(dim[0])
elif n_dim==2:
# We use the Grid2dGraph generator to also get the positions
g = Grid2dGraph(*dim)
elif n_dim>2:
# Vertices are tuples of dimension n_dim, and the graph contains at
# least vertex (0, 0, ..., 0)
g.add_vertex(tuple([0]*n_dim))
#.........这里部分代码省略.........