?? pointer.c
字號:
/* Assign a pointer link to a vertex. Edge e joins a vertex in blossom *//* u to a linked vertex. */#include "wmatch.h"void POINTER (int u, int v, int e){ int i, del;#ifdef DEBUG printf("Pointer u,v,e=%d %d %d-%d\n",u,v,END[OPPEDGE(e)],END[e]);#endif LINK[u] = -DUMMYEDGE; NEXTVTX[LASTVTX[u]] = DUMMYVERTEX; NEXTVTX[LASTVTX[v]] = DUMMYVERTEX; if (LASTVTX[u] != u) { i = MATE[NEXTVTX[u]]; del = -SLACK(i) / 2; } else del = LAST_D; i = u; while (i != DUMMYVERTEX) { Y[i] += del; NEXT_D[i] += del; i = NEXTVTX[i]; } if (LINK[v] < 0) { LINK[v] = e; NEXTPAIR[DUMMYEDGE] = DUMMYEDGE; SCAN (v, DELTA); return; } else { LINK[v] = e; return; }}/* Scan each vertex in the blossom whose base is x */void SCAN (int x, int del){ int u, del_e;#ifdef DEBUG printf("Scan del=%d x=%d\n",del,x);#endif newbase = BASE[x]; stopscan = NEXTVTX[LASTVTX[x]]; while (x != stopscan) { Y[x] += del; NEXT_D[x] = LAST_D; pairpoint = DUMMYEDGE; e = A[x]; while (e != 0) { neighbor = END[e]; u = BASE[neighbor]; if (LINK[u] < 0) { if (LINK[BMATE (u)] < 0 || LASTVTX[u] != u) { del_e = SLACK (e); if (NEXT_D[neighbor] > del_e) { NEXT_D[neighbor] = del_e; NEXTEDGE[neighbor] = e; } } } else if (u != newbase) { INSERT_PAIR(); } e = A[e]; } x = NEXTVTX[x]; } NEXTEDGE[newbase] = NEXTPAIR[DUMMYEDGE];}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -