Пример #1
0
        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));
        }
Пример #2
0
        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);
        }