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); } }
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); } }
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); } }