📄 csa_defs.h
字号:
#define TRUE 1#define FALSE 0#define MAXLINE 100#define DEFAULT_SCALE_FACTOR 10#define DEFAULT_PO_COST_THRESH (2.0 * sqrt((double) n) * \ sqrt(sqrt((double) n)))#define DEFAULT_PO_WORK_THRESH 50#define DEFAULT_UPD_FAC 2#if defined(USE_SP_AUG_FORWARD) || defined(USE_SP_AUG_BACKWARD)#ifndef USE_SP_AUG#define USE_SP_AUG#endif#endif#ifdef USE_SP_AUG#define EXCESS_THRESH 127#else#define EXCESS_THRESH 0#endif#if defined(USE_P_UPDATE) || defined(STRONG_PO)#define WORK_TYPE unsigned#define REFINE_WORK relabelings#endif#if defined(DEBUG) && defined(ROUND_COSTS)#define MAGIC_MARKER 0xAAAAAAAA#endif#ifdef QUEUE_ORDER#define ACTIVE_TYPE queue#define create_active(size) active = q_create(size)#define make_active(v) enq(active, (char *) v)#define get_active_node(v) v = (lhs_ptr) deq(active)#else#define ACTIVE_TYPE stack#define create_active(size) active = st_create(size)#define make_active(v) st_push(active, (char *) v)#define get_active_node(v) v = (lhs_ptr) st_pop(active)#endif#define st_push(s, el) \{\*(s->top) = (char *) el;\s->top++;\}#define st_empty(s) (s->top == s->bottom)#define enq(q, el) \{\*(q->tail) = el;\if (q->tail == q->end) q->tail = q->storage;\else q->tail++;\}#define q_empty(q) (q->head == q->tail ? 1 : 0)#define insert_list(node, head) \{\node->next = (*(head));\(*(head))->prev = node;\(*(head)) = node;\node->prev = tail_rhs_node;\}#define delete_list(node, head) \{\if (node->prev == tail_rhs_node)\ (*(head)) = node->next;\node->prev->next = node->next;\node->next->prev = node->prev;\}/*The author hereby apologizes for the following incomprehensiblemuddle. Price-outs involve moving arcs around in the data structure,and it turns out to be faster to copy them field-by-field than to usememcpy() because they're so small. But the set of fields an arc hasdepends on lots of things, hence this mess.*/#if defined(USE_PRICE_OUT) || defined(ROUND_COSTS)#ifdef STORE_REV_ARCS#ifdef ROUND_COSTS#define copy_lr_arc(a, b) \{\b->head = a->head;\b->c_init = a->c_init;\b->c = a->c;\b->rev = a->rev;\}#else /* ROUND_COSTS */#define copy_lr_arc(a, b) \{\b->head = a->head;\b->c = a->c;\b->rev = a->rev;\}#endif /* ROUND_COSTS */#ifdef USE_P_UPDATE#define copy_rl_arc(a, b) \ { b->tail = a->tail; b->c = a->c; b->rev = a->rev; }#else /* USE_P_UPDATE */#define copy_rl_arc(a, b) \ { b->tail = a->tail; b->rev = a->rev; }#endif /* USE_P_UPDATE */#define exch_rl_arcs(a, b) \{\copy_rl_arc(b, tail_rl_arc);\copy_rl_arc(a, b);\copy_rl_arc(tail_rl_arc, a);\}#else /* STORE_REV_ARCS */#ifdef PREC_COSTS#define copy_lr_arc(a, b) \{\b->head = a->head;\b->c = a->c;\}#else /* PREC_COSTS */#define copy_lr_arc(a, b) \{\b->head = a->head;\b->c_init = a->c_init;\b->c = a->c;\}#endif /* PREC_COSTS */#endif /* STORE_REV_ARCS */#define exch_lr_arcs(a, b) \{\copy_lr_arc(b, tail_lr_arc);\copy_lr_arc(a, b);\copy_lr_arc(tail_lr_arc, a);\}extern lr_aptr tail_lr_arc;#ifdef STORE_REV_ARCSextern rl_aptr tail_rl_arc;#endif#ifdef STORE_REV_ARCS#define price_in_rev(a) \{ \register rl_aptr b_a = --a->head->back_arcs; \register rl_aptr a_r = a->rev; \if (b_a != a_r) \ { \ register lr_aptr b_r = b_a->rev; \ exch_rl_arcs(b_a, a_r); \ b_r->rev = a_r; \ a->rev = b_a; \ } \}#define price_out_rev(a) \{ \register rl_aptr b_a = a->head->back_arcs; \register rl_aptr a_r = a->rev; \if (b_a != a_r) \ { \ register lr_aptr b_r = b_a->rev; \ exch_rl_arcs(b_a, a_r); \ b_r->rev = a_r; \ a->rev = b_a; \ } \a->head->back_arcs++; \}#define handle_rev_pointers(a, b) { a->rev->rev = b; b->rev->rev = a; }#else /* STORE_REV_ARCS */#define price_in_rev(a) /* do nothing */#define price_out_rev(a) /* do nothing */#define handle_rev_pointers(a, b) /* do nothing */#endif /* STORE_REV_ARCS */#define price_in_unm_arc(v, a) \{ \register lr_aptr f_a = --v->first; \price_in_rev(a); \if (f_a != a) \ { \ if (v->matched == f_a) v->matched = a; \ handle_rev_pointers(a, f_a); \ exch_lr_arcs(a, f_a); \ } \}#define price_in_mch_arc(v, a) \{ \register lr_aptr f_a = --v->first; \price_in_rev(a); \a->head->node_info.priced_in = TRUE; \if (f_a != a) \ { \ v->matched = f_a; \ handle_rev_pointers(a, f_a); \ exch_lr_arcs(a, f_a); \ } \}#define price_out_unm_arc(v, a) \{ \register lr_aptr f_a = v->first++; \price_out_rev(a); \if (f_a != a) \ { \ if (v->matched == f_a) v->matched = a; \ handle_rev_pointers(a, f_a); \ exch_lr_arcs(a, f_a); \ } \}#define price_out_mch_arc(v, a) \{ \register lr_aptr f_a = v->first++; \price_out_rev(a); \a->head->node_info.priced_in = FALSE; \if (f_a != a) \ { \ v->matched = f_a; \ handle_rev_pointers(a, f_a); \ exch_lr_arcs(a, f_a); \ } \}#endif /* USE_PRICE_OUT || ROUND_COSTS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -