41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
|
from networkx.utils import reverse_cuthill_mckee_ordering
|
||
|
import networkx as nx
|
||
|
|
||
|
|
||
|
def test_reverse_cuthill_mckee():
|
||
|
# example graph from
|
||
|
# http://www.boost.org/doc/libs/1_37_0/libs/graph/example/cuthill_mckee_ordering.cpp
|
||
|
G = nx.Graph([(0, 3), (0, 5), (1, 2), (1, 4), (1, 6), (1, 9), (2, 3),
|
||
|
(2, 4), (3, 5), (3, 8), (4, 6), (5, 6), (5, 7), (6, 7)])
|
||
|
rcm = list(reverse_cuthill_mckee_ordering(G))
|
||
|
assert rcm in [[0, 8, 5, 7, 3, 6, 2, 4, 1, 9],
|
||
|
[0, 8, 5, 7, 3, 6, 4, 2, 1, 9]]
|
||
|
|
||
|
|
||
|
def test_rcm_alternate_heuristic():
|
||
|
# example from
|
||
|
G = nx.Graph([(0, 0),
|
||
|
(0, 4),
|
||
|
(1, 1),
|
||
|
(1, 2),
|
||
|
(1, 5),
|
||
|
(1, 7),
|
||
|
(2, 2),
|
||
|
(2, 4),
|
||
|
(3, 3),
|
||
|
(3, 6),
|
||
|
(4, 4),
|
||
|
(5, 5),
|
||
|
(5, 7),
|
||
|
(6, 6),
|
||
|
(7, 7)])
|
||
|
|
||
|
answers = [[6, 3, 5, 7, 1, 2, 4, 0], [6, 3, 7, 5, 1, 2, 4, 0],
|
||
|
[7, 5, 1, 2, 4, 0, 6, 3]]
|
||
|
|
||
|
def smallest_degree(G):
|
||
|
deg, node = min((d, n) for n, d in G.degree())
|
||
|
return node
|
||
|
rcm = list(reverse_cuthill_mckee_ordering(G, heuristic=smallest_degree))
|
||
|
assert rcm in answers
|