Method: ZDD.mincover
- Defined in:
- ext/zdd_so/zdd_so.cpp
.mincover ⇒ Object
##vsop_print_mincover##
2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 |
# File 'ext/zdd_so/zdd_so.cpp', line 2928 VALUE vsop_print_mincover( VALUE self){ Vsop_Ruby* rmod; Data_Get_Struct(self,Vsop_Ruby,rmod); CtoI *ctoi_fin; auto_ptr<CtoI> auto_p(new CtoI(*rmod->cmod)); CtoI *ctoitmp = auto_p.get(); *ctoitmp = ctoitmp -> NonZero(); if(*ctoitmp == CtoI_Null()) { *ctoitmp = 0; ctoi_fin = new CtoI(0); rb_raise(rb_eRuntimeError,"10Memory overflow"); } if(*ctoitmp == 0){ ctoi_fin = new CtoI(0); } else { ZBDD f = ctoitmp -> GetZBDD(); if(MinCost(f)==0){ ctoi_fin = new CtoI(1); } else { CtoI ctmp(1); while(1) { int var = f.Top(); if(var == 0) break; ZBDD f0 = f.OffSet(var); ZBDD f1 = f.OnSet0(var); int c1 = MinCost(f1) + VTable.GetValue(var); if(MinCost(f0) > c1) { f = f1; ctmp = ctmp.AffixVar(var); } else f = f0; } ctoi_fin = new CtoI(ctmp); } } Vsop_Ruby *rmod_rtn = new Vsop_Ruby; rmod_rtn->cmod = ctoi_fin; return Data_Wrap_Struct(rb_class_of(self),0,free_rmod,rmod_rtn); } |