diff --git a/listcolouring/__init__.py b/listcolouring/__init__.py index 6eb0b42..f5ff9e1 100644 --- a/listcolouring/__init__.py +++ b/listcolouring/__init__.py @@ -72,6 +72,13 @@ def greedy_list_edge_colouring(G): G[u][v]["colour"] = first_permissible_or_none(G, u, v) # random.choice(colours) return(G) +def greedy_list_node_colouring(G): + """Assign the first permissible colour to every node (or None if all permissible + colours already used on incident edges).""" + for u in G.nodes: + G.nodes[u]["colour"] = first_permissible_or_none_node(G, u) + return(G) + def print_list_edge_colouring(G): """Print assigned colours and lists of permissible colours for all edges in G.""" for n, nbrs in G.adj.items(): diff --git a/tests/test_greedy-list-node-colouring.py b/tests/test_greedy-list-node-colouring.py new file mode 100644 index 0000000..f9f5b8e --- /dev/null +++ b/tests/test_greedy-list-node-colouring.py @@ -0,0 +1,14 @@ +import networkx as nx + +import listcolouring +from listcolouring import greedy_list_node_colouring + +def test_greedy_list_node_colouring(): + G = nx.complete_graph(3) + permissible_dict = {0: [0, 1], 1: [1, 2], 2: [2, 3]} + nx.set_node_attributes(G, permissible_dict, "permissible") + nx.set_node_attributes(G, None, "colour") + G = greedy_list_node_colouring(G) + assert G.nodes[0]["colour"] == 0 + assert G.nodes[1]["colour"] == 1 + assert G.nodes[2]["colour"] == 2