本文整理汇总了Python中sage.graphs.digraph.DiGraph.reverse_edge方法的典型用法代码示例。如果您正苦于以下问题:Python DiGraph.reverse_edge方法的具体用法?Python DiGraph.reverse_edge怎么用?Python DiGraph.reverse_edge使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.graphs.digraph.DiGraph
的用法示例。
在下文中一共展示了DiGraph.reverse_edge方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: strong_orientations_iterator
# 需要导入模块: from sage.graphs.digraph import DiGraph [as 别名]
# 或者: from sage.graphs.digraph.DiGraph import reverse_edge [as 别名]
#.........这里部分代码省略.........
EXAMPLES:
A cycle has one possible (non-symmetric) strong orientation::
sage: g = graphs.CycleGraph(4)
sage: it = g.strong_orientations_iterator()
sage: len(list(it))
1
A tree cannot be strongly oriented::
sage: g = graphs.RandomTree(100)
sage: len(list(g.strong_orientations_iterator()))
0
Neither can be a disconnected graph::
sage: g = graphs.CompleteGraph(6)
sage: g.add_vertex(7)
sage: len(list(g.strong_orientations_iterator()))
0
TESTS:
sage: g = graphs.CompleteGraph(2)
sage: len(list(g.strong_orientations_iterator()))
0
sage: g = graphs.CubeGraph(3)
sage: b = True
sage: for orientedGraph in g.strong_orientations_iterator():
....: if not orientedGraph.is_strongly_connected():
....: b = False
sage: b
True
The total number of strong orientations of a graph can be counted using
the Tutte polynomial evaluated at points (0,2)::
sage: g = graphs.PetersenGraph()
sage: nr1 = len(list(g.strong_orientations_iterator()))
sage: nr2 = g.tutte_polynomial()(0,2)
sage: nr1 == nr2/2 # The Tutte polynomial counts also the symmetrical orientations
True
"""
# if the graph has a bridge or is disconnected,
# then it cannot be strongly oriented
if G.order() < 3 or not G.is_biconnected():
return
V = G.vertices()
Dg = DiGraph([G.vertices(), G.edges()], pos=G.get_pos())
# compute an arbitrary spanning tree of the undirected graph
te = kruskal(G)
treeEdges = [(u,v) for u,v,_ in te]
A = [edge for edge in G.edges(labels=False) if edge not in treeEdges]
# initialization of the first binary word 00...0
# corresponding to the current orientation of the non-tree edges
existingAedges = [0]*len(A)
# Make the edges of the spanning tree doubly oriented
for e in treeEdges:
if Dg.has_edge(e):
Dg.add_edge(e[1], e[0])
else:
Dg.add_edge(e)
# Generate all orientations for non-tree edges (using Gray code)
# Each of these orientations can be extended to a strong orientation
# of G by orienting properly the tree-edges
previousWord = 0
i = 0
# the orientation of one edge is fixed so we consider one edge less
nr = 2**(len(A)-1)
while i < nr:
word = (i >> 1) ^ i
bitChanged = word ^ previousWord
bit = 0
while bitChanged > 1:
bitChanged >>= 1
bit += 1
previousWord = word
if existingAedges[bit] == 0:
Dg.reverse_edge(A[bit])
existingAedges[bit] = 1
else:
Dg.reverse_edge(A[bit][1], A[bit][0])
existingAedges[bit] = 0
# launch the algorithm for enumeration of the solutions
for sol in _strong_orientations_of_a_mixed_graph(Dg, V, treeEdges):
yield sol
i = i + 1