Esempio n. 1
0
        static IEnumerable <Choosability.Graph> EnumerateWeightings(Choosability.Graph g)
        {
            var space = Not ? g.Vertices.Select(v => Enumerable.Range(0, Spread)).CartesianProduct() : g.Vertices.Select(v => Enumerable.Range(0, Spread).Reverse()).CartesianProduct();

            foreach (var weighting in space)
            {
                var www = weighting.ToList();
                if (www.Count(w => w > 0) > MaxHighs)
                {
                    continue;
                }

                if (g.Vertices.Any(v => g.Degree(v) - www[v] <= 1))
                {
                    continue;
                }

                if (LowMinDegree > 0)
                {
                    var low = www.IndicesWhere(w => w == 0).ToList();
                    if (g.InducedSubgraph(low).MinDegree < LowMinDegree)
                    {
                        continue;
                    }
                }

                var gg = g.Clone();
                gg.VertexWeight = www;

                yield return(gg);
            }
        }
Esempio n. 2
0
        static IEnumerable <Choosability.Graph> EnumerateWeightings(Choosability.Graph g)
        {
            if (g.MaxDegree > 4)
            {
                yield break;
            }

            foreach (var weighting in g.Vertices.Select(v => Enumerable.Range(g.Degree(v), 2)).CartesianProduct())
            {
                var www = weighting.ToList();

                var gg = g.Clone();
                gg.VertexWeight = www;
                yield return(gg);
            }
        }
Esempio n. 3
0
        public static void DoUiGraph()
        {
            var output = "generated.txt";

            File.Delete(output);

            Graphs.Graph uiG;
            using (var sr = new StreamReader("uigraph.txt"))
                uiG = GraphsCore.CompactSerializer.Deserialize(sr.ReadToEnd());

            var excluded = "excluded.txt".EnumerateWeightedGraphs().ToList();

            var g = new Choosability.Graph(uiG.GetEdgeWeights(), uiG.Vertices.Select(v =>
            {
                int d;
                if (!int.TryParse(v.Label, out d))
                {
                    return(0);
                }

                return(d - 5);
            }).ToList());

            var all = new List <Graph>();

            var zi = g.VertexWeight.IndicesWhere(w => w == 0).ToList();

            foreach (var a in zi.Select(i => new[] { 1, 2 }).CartesianProduct())
            {
                var aa = a.ToList();
                for (int j = 0; j < aa.Count; j++)
                {
                    g.VertexWeight[zi[j]] = aa[j];
                }

                all.Add(g.Clone());
            }

            foreach (var gg in all.RemoveIsomorphs(excluded))
            {
                gg.AppendWeightStringToFile(output);
            }
        }