Example #1
0
        static bool IsChoosable(this IGraph_long graph, long[] colorGraph, long liveVertexBits, int c)
        {
            graph.BeGreedy(colorGraph, ref liveVertexBits, c);
            if (liveVertexBits == 0)
            {
                return(true);
            }
            if ((liveVertexBits & ~colorGraph.Or(c)) != 0)
            {
                return(false);
            }

            var choosable = false;
            var V         = colorGraph[c] & liveVertexBits;

            foreach (var C in graph.MaximalIndependentSubsets(V))
            {
                if (graph.IsChoosable(colorGraph, liveVertexBits ^ C, c + 1))
                {
                    choosable = true;
                    break;
                }
            }

            return(choosable);
        }