# The Welsh-Powell Algorithm

This class is intended to implement the Welsh-Powell algorithm for the problem of graph coloring. It provides a greedy algorithm that runs on a static graph.

This is an iterative greedy algorithm:

• Step 1: All vertices are sorted according to the decreasing value of their degree in a list V.
• Step 2: Colors are ordered in a list C.
• Step 3: The first non colored vertex v in V is colored with the first available color in C. available means a color that was not previously used by the algorithm.
• Step 4: The remaining part of the ordered list V is traversed and the same color is allocated to every vertex for which no adjacent vertex has the same color.
• Step 5: Steps 3 and 4 are applied iteratively until all the vertices have been colored.

Note that the given colors are not real colors. Instead they are positive integers starting 0. So, for instance, if a colored graph’s chromatic number is 3, then nodes will be “colored” with one of 0, 1 or 2.

After computation using `compute()`, the algorithm result for the computation, the chromatic number, is accessible with the `getChromaticNumber()` method. Colors (of “Integer” type) are stored in the graph as attributes (one for each node). By default the attribute name is “WelshPowell.color”, but you can optional choose the attribute name.

## Example

This shall return:

``````The chromatic number of this graph is : 3
Node D : color 0
Node E : color 2
Node F : color 1
Node A : color 2
Node B : color 1
Node C : color 0
``````

## Display Colors

Consider you what to display the result of the coloring algorithm on a displayed graph, then adding the following code to the previous example may help you:

## Complexity

This algorithm is known to use at most d(G)+1 colors where d(G) represents the largest value of the degree in the graph G.

## Reference

• Welsh, D. J. A.; Powell, M. B. (1967), “An upper bound for the chromatic number of a graph and its application to timetabling problems”, The Computer Journal 10 (1): 85–86, doi:10.1093/comjnl/10.1.85