@@ -1439,6 +1439,21 @@ def _all_paths_iterator(self, vertex, ending_vertices=None,
1439
1439
1440
1440
EXAMPLES::
1441
1441
1442
+ sage: G = graphs. CompleteGraph( 4)
1443
+ sage: list( G. _all_paths_iterator( 1, ending_vertices=[3 ], simple=True))
1444
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 0, 2, 3 ], [1, 2, 0, 3 ]]
1445
+ sage: list( G. shortest_simple_paths( 1, 3))
1446
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 2, 0, 3 ], [1, 0, 2, 3 ]]
1447
+ sage: pi = G. _all_paths_iterator( 1, ending_vertices=[3 ])
1448
+ sage: for _ in range( 6) :
1449
+ .... : print( next( pi))
1450
+ [1, 3 ]
1451
+ [1, 0, 3 ]
1452
+ [1, 2, 3 ]
1453
+ [1, 0, 1, 3 ]
1454
+ [1, 0, 2, 3 ]
1455
+ [1, 2, 0, 3 ]
1456
+
1442
1457
sage: g = DiGraph( {'a': ['a', 'b' ], 'b': ['c' ], 'c': ['d' ], 'd': ['c' ]}, loops=True)
1443
1458
sage: pi = g. _all_paths_iterator( 'a', ending_vertices=['d' ], report_edges=True, simple=True)
1444
1459
sage: list( pi)
@@ -1536,6 +1551,11 @@ def _all_paths_iterator(self, vertex, ending_vertices=None,
1536
1551
if max_length < 1 :
1537
1552
return
1538
1553
1554
+ if self .is_directed():
1555
+ neighbor_iterator = self .neighbor_out_iterator
1556
+ else :
1557
+ neighbor_iterator = self .neighbor_iterator
1558
+
1539
1559
cdef dict my_dict = {}
1540
1560
cdef dict edge_multiplicity
1541
1561
if not data:
@@ -1579,7 +1599,7 @@ def _all_paths_iterator(self, vertex, ending_vertices=None,
1579
1599
# for further extension, but just yield it immediately. See
1580
1600
# trac #12385.
1581
1601
frozen_path = frozenset (path)
1582
- for neighbor in self .neighbor_out_iterator (path[- 1 ]):
1602
+ for neighbor in neighbor_iterator (path[- 1 ]):
1583
1603
if neighbor not in frozen_path:
1584
1604
queue.append(path + [neighbor])
1585
1605
elif (neighbor == path[0 ] and
@@ -1600,7 +1620,7 @@ def _all_paths_iterator(self, vertex, ending_vertices=None,
1600
1620
yield newpath
1601
1621
else :
1602
1622
# Non-simple paths requested: we add all of them
1603
- for neighbor in self .neighbor_out_iterator (path[- 1 ]):
1623
+ for neighbor in neighbor_iterator (path[- 1 ]):
1604
1624
queue.append(path + [neighbor])
1605
1625
1606
1626
if not queue:
@@ -1686,6 +1706,21 @@ def all_paths_iterator(self, starting_vertices=None, ending_vertices=None,
1686
1706
1687
1707
EXAMPLES::
1688
1708
1709
+ sage: G = graphs. CompleteGraph( 4)
1710
+ sage: list( G. all_paths_iterator( starting_vertices=[1 ], ending_vertices=[3 ], simple=True))
1711
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 0, 2, 3 ], [1, 2, 0, 3 ]]
1712
+ sage: list( G. shortest_simple_paths( 1, 3))
1713
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 2, 0, 3 ], [1, 0, 2, 3 ]]
1714
+ sage: pi = G. all_paths_iterator( starting_vertices=[1 ], ending_vertices=[3 ])
1715
+ sage: for _ in range( 6) :
1716
+ .... : print( next( pi))
1717
+ [1, 3 ]
1718
+ [1, 0, 3 ]
1719
+ [1, 2, 3 ]
1720
+ [1, 0, 1, 3 ]
1721
+ [1, 0, 2, 3 ]
1722
+ [1, 2, 0, 3 ]
1723
+
1689
1724
sage: g = DiGraph( {'a': ['a', 'b' ], 'b': ['c' ], 'c': ['d' ], 'd': ['c' ]}, loops=True)
1690
1725
sage: pi = g. all_paths_iterator( starting_vertices=['a' ], ending_vertices=['d' ], report_edges=True, simple=True)
1691
1726
sage: list( pi)
@@ -1909,6 +1944,33 @@ def all_simple_paths(self, starting_vertices=None, ending_vertices=None,
1909
1944
1910
1945
EXAMPLES::
1911
1946
1947
+ sage: G = graphs. CompleteGraph( 4)
1948
+ sage: G. all_simple_paths( [1 ], [3 ])
1949
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 0, 2, 3 ], [1, 2, 0, 3 ]]
1950
+ sage: list( G. shortest_simple_paths( 1, 3))
1951
+ [[1, 3 ], [1, 0, 3 ], [1, 2, 3 ], [1, 2, 0, 3 ], [1, 0, 2, 3 ]]
1952
+ sage: G. all_simple_paths( [0, 1 ], [2, 3 ])
1953
+ [[1, 2 ],
1954
+ [1, 3 ],
1955
+ [0, 2 ],
1956
+ [0, 3 ],
1957
+ [0, 1, 2 ],
1958
+ [0, 1, 3 ],
1959
+ [0, 2, 3 ],
1960
+ [0, 3, 2 ],
1961
+ [1, 0, 2 ],
1962
+ [1, 0, 3 ],
1963
+ [1, 2, 3 ],
1964
+ [1, 3, 2 ],
1965
+ [1, 0, 2, 3 ],
1966
+ [1, 0, 3, 2 ],
1967
+ [1, 2, 0, 3 ],
1968
+ [1, 3, 0, 2 ],
1969
+ [0, 1, 2, 3 ],
1970
+ [0, 1, 3, 2 ],
1971
+ [0, 2, 1, 3 ],
1972
+ [0, 3, 1, 2 ]]
1973
+
1912
1974
sage: g = DiGraph( {0: [0, 1 ], 1: [2 ], 2: [3 ], 3: [2 ]}, loops=True)
1913
1975
sage: g. all_simple_paths( )
1914
1976
[[3, 2 ],
0 commit comments