public static SolutionSpec BuildSolutionByRibbonGraph(Graph <PointProjectionSolver.ProjectedEdgeInfo, PointProjectionSolver.ProjectedNodeInfo> graph) { var cycleFinder = new CycleFinder <PointProjectionSolver.ProjectedEdgeInfo, PointProjectionSolver.ProjectedNodeInfo>( graph, n => n.Data.Projection); var cycles = cycleFinder.GetCycles(); var reflectedCycles = CycleReflector.GetUnribbonedCycles(cycles); return(SolutionSpecBuilder.BuildSolutionByCycles(reflectedCycles)); }
private static SolutionSpec Solve(ProblemSpec problemSpec, double originality) { var solver = SolverMaker.CreateSolver(problemSpec); var ribbonWidth = RibbonIndicator.GetRibbonWidth(problemSpec); var simpleSolver = SolverMaker.Solve(solver, ribbonWidth.HasValue ? ribbonWidth.Value : 1, originality); if (simpleSolver != null) { return(SolutionSpecBuilder.BuildSolutionByRibbonGraph(simpleSolver.Projection)); } return(null); }