⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointer.c

📁 ViennaRNA-1.6.1
💻 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 + -