A C++ implementation in the Boost Graph Library of two algorithms for path coloring and path list-coloring plane graphs. The main parts of the project are the header library and documentation, a research paper, and presentation slides from a talk given on the research.
DISCLAIMER: The implementation in this repo is generic C++ nonsense I wrote before I knew better. A simple C implementation exists in libavengraph along with new animations and benchmarks.
A path coloring of a graph partitions its vertex set into color classes such that each class induces a disjoint union of paths. A set of vertices S in a graph G induces a disjoint union of paths if the subgraph of G formed by the vertices in S and all the edges between vertices in S is a collection of (disjoint) paths. In this project we implement several algorithms to compute path colorings of graphs embedded in the plane.
We present two algorithms to path color plane graphs with 3 colors, based on a proof by Poh in 1990. First we describe a naive algorithm that directly follows Poh's procedure, then we give a modified algorithm that runs in linear time.
Independent results of Hartman and Skrekovski describe a procedure that takes a plane graph and a list of 3 colors for each vertex, and computes a path coloring such that each vertex recieves a color from its list. We provide a linear time algorithm based on Hartman and Skrekovski's proofs.
A C++ implementation is provided for all three algorithms, utilizing the Boost Graph Library. Instructions are given on how to use the implementation to construct colorings for plane graphs represented by Boost data structures.