示例#1
0
static void remg(int n0, cgraph ** c)
{   /* - remove gluon issue from vertex n0  from first C-graph - 08/01/90  */
    int  n1;
#  if (CDEBLEV > DEBLEV)
    printf(".......RemG........%u\n",(unsigned int)n0);
    wrcg(*c);
#  endif
    n1 = findl(1,n0,*c);
    if (istadpole(n0,*c) || istadpole(n1,*c))
    {
        (*c)->sgn=0;
        (*c)->gl = 0;
        (*c)->vl[n0-1].vt = zv;
        (*c)->vl[n1-1].vt = zv;
#     if (CDEBLEV > DEBLEV)
        wrcg(*c);
#     endif
    }
    else  if((*c)->vl[n1-1].vt==qg) remqg_qg(n0,n1,c);
    else remqg_3g(n0,n1,c);

#  if (CDEBLEV > DEBLEV)
    fprintf(stderr,".......end RemG........\n");
#  endif
} /* RemG */
示例#2
0
文件: main.c 项目: siebenmann/sam
void
duplicate(Flayer *l, Rectangle r, XftFont *f, int close)
{
	Text *t=(Text *)l->user1;
	Flayer *nl = findl(t);
	Rune *rp;
	ulong n;

	if(nl){
		flnew(nl, stgettext, l->user0, (char *)t);
		flinit(nl, r, f);
		nl->origin = l->origin;
		rp = (*l->textfn)(l, l->f.nchars, &n);
		flinsert(nl, rp, rp+n, l->origin);
		flsetselect(nl, l->p0, l->p1);
		if(close){
			flclose(l);
			if(l==which)
				which = 0;
		}else
			t->nwin++;
		current(nl);
		hcheck(t->tag);
	}
	cursorswitch(cursor);
}
示例#3
0
static void remqg_qg2(int n0,int n1,cgraph* cg)
{   int     n2;
    /* - remove subgraph (see figure) from C-graph - 08/01/90 */
    cg->powNN_1++;                        /*           v1     */
    cg->powN--;                           /*   v2 -->--*--    */
    cg->pow2--;                           /*           :  |   */
    n2 = findl(2,n1,cg);                    /*           :  |   */
    cg->vl[n2-1].e[2] = cg->vl[n0-1].e[2];  /*   v3 --<--*--    */
}                                          /*           v0     */
示例#4
0
int computeminpos(int level)
{
	int i,result;
	for(i=1,result=level;i<N;i++)
	{
		result*=10;
	}
	return findl(result);
}
示例#5
0
static void remtv(cgraph * pgl )
{   /* Remove transfered vertex from all C-graphs - 06/01/90     */

    int         n, n1;
    int         vt0;   /* Original type */
    int         ee;
    /*       v0        */
    /*  -->--*-->--v1  */
#if (CDEBLEV > DEBLEV)                     /*                 */
    fprintf(stderr,".......RemTV........\n");/*                 */
#endif                                     /*       v0        */
    /*  .....*.....v1  */

    while (findv(tv,pgl,&n) || findv(g2,pgl,&n))
    {
#  if (CDEBLEV > DEBLEV)
        if (pgl != NULL) wrcg(pgl);
#  endif
        vt0 = pgl->vl[n-1].vt;
        pgl->vl[n-1].vt = zv;
        pgl->gl--;
        if (istadpole(n,pgl))
            if (pgl->vl[n-1].e[0] != 0) pgl->powNN_1++;
            else  pgl->powN++;
        else if (pgl->vl[n-1].e[0] != 0) {
            n1 = findl(1,n,pgl);
            if (pgl->vl[n1-1].vt == g2 &&
                    pgl->vl[n1-1].e[0] != pgl->vl[n-1].e[0]) {
                ee = pgl->vl[n1-1].e[0];
                pgl->vl[n1-1].e[0] = pgl->vl[n1-1].e[1];
                pgl->vl[n1-1].e[1] = ee;
            }
            else if (pgl->vl[n1-1].vt == g3)
                rev3g(pgl->vl[n-1].e[0],&pgl->vl[n1-1]);
            pgl->vl[n1-1].e[0] = pgl->vl[n-1].e[1];
        }
        else {
            n1 = findl(2,n,pgl);
            pgl->vl[n1-1].e[2] = pgl->vl[n-1].e[2];
        }
    }
}
示例#6
0
static void remqg_qg(int n0,int n1, cgraph ** c)
{   /* - remove gluon connected vertex n0 and n1 (see fugure) from first C-graph - 08/01/90  */
    int  n2, n5;
    cgraph * cg=*c;

#  if (CDEBLEV > DEBLEV)
    printf(".......RemQG-QG........%u,%u\n",(unsigned int) n0,
           (unsigned int) n1);
#  endif

    cg->vl[n0-1].vt = zv;
    cg->vl[n1-1].vt = zv;
    cg->gl -= 2;
    if (cg->vl[n0-1].e[1] == cg->vl[n1-1].e[2] &&   /*         v1      */
            cg->vl[n0-1].e[2] == cg->vl[n1-1].e[1])     /*    -->--*--     */
    {   /*   |     :  |    */
        cg->powNN_1++;                               /*   |     :  |    */
        cg->pow2--;                                  /*    --<--*--     */
    }                                               /*         v0      */
    else  if (cg->vl[n0-1].e[1] == cg->vl[n1-1].e[2])  remqg_qg2(n0,n1,cg);
    else  if (cg->vl[n0-1].e[2] == cg->vl[n1-1].e[1])  remqg_qg2(n1,n0,cg);
    else
    {
        n2 = findl(2,n0,cg);                         /*         v0        */
        cg->vl[n2-1].e[2] = cg->vl[n1-1].e[2];       /*  v2-->--*-->--v3  */
        n5 = findl(2,n1,cg);                         /*         :         */
        cg->vl[n5-1].e[2] = cg->vl[n0-1].e[2];       /*         :         */
        cg->pow2--;                                  /*  v4--<--*--<--v5  */
        /*         v1        */
        cg=addcg(c);
        cg->sgn*=-1;
        cg->powN--;
        cg->vl[n2-1].e[2] =  cg->vl[n0-1].e[2];
        cg->vl[n5-1].e[2] =  cg->vl[n1-1].e[2];
    }
#  if (CDEBLEV > DEBLEV)
    wrcg(cg);
    if (cg->next != NULL)
        wrcg(cg->next);
#  endif
}
示例#7
0
void main()
{
	clrscr();
	printf( "\n" );
	input();
	initialize();

	while(1)
	{
		min=dmin();
		visited[min]=1;
		flag=0;
		for( i = 1; i <=n; i++ )
		{
			if((mat[min][i]>0)&&(visited[i]!=1))
			{
				j=i;
				flag=1;
				prevdj=d[j];
				if( j > 0)
				{
					if( d[j] > 0)
					{
						if(d[j]<(d[min]+mat[min][j]))
							d[j]=d[j];

						else
							d[j]=(d[min]+mat[min][j]);
					}
					else
						d[j]=(d[min]+mat[min][j]);
				}
				if(prevdj!=d[j])
					p[j]=i;
			}
		}
		if((flag==0)&&(i==n+1))
			break;


		findl();

	}


	printf( "\n RESULT : " );

	for( i = 1; i <= n; i++ )
		printf( "%d\t",p[i] );

	getch();
}
示例#8
0
static void remqg_3g(int n0,int n1, cgraph  ** c)
/* - remove gluon connected vertex n0 and n1 (see figure)
     from first C-graph - 08/01/90  */
{   int          n2, n3;   /*         v1        */
    int          en;       /*  v2.....*.....v3  */
    cgraph * cg = *c;      /*         :         */
    /*         :         */
    /*  v3-->--*-->--v4  */
    /*          v0       */
#  if (CDEBLEV > DEBLEV)
    fprintf(stderr,".......RemQG-3G........%u,%u\n",
            (unsigned int)n0,(unsigned int)n1);
#  endif
    rev3g(cg->vl[n0-1].e[0],&cg->vl[n1-1]);
    n2 = findl(2,n1,cg);
    if (cg->vl[n2-1].vt == g3)
        rev3g(cg->vl[n1-1].e[1],&cg->vl[n2-1]);
    cg->vl[n0-1].vt = qg;
    cg->vl[n0-1].e[0] = cg->vl[n2-1].e[0];
    en = cg->vl[n0-1].e[2];
    cg->vl[n0-1].e[2] = cg->vl[n1-1].e[0];
    n3 = findl(3,n1,cg);
    if (cg->vl[n3-1].vt == g3)
        rev3g(cg->vl[n1-1].e[2],&cg->vl[n3-1]);
    cg->vl[n1-1].vt = qg;
    cg->vl[n1-1].e[0] = cg->vl[n3-1].e[0];
    cg->vl[n1-1].e[1] = cg->vl[n0-1].e[2];
    cg->vl[n1-1].e[2] = en;

    cg=addcg(c);
    cg->sgn*=-1;
    cg->vl[n0-1].e[0] = cg->next->vl[n1-1].e[0];
    cg->vl[n1-1].e[0] = cg->next->vl[n0-1].e[0];

#  if (CDEBLEV > DEBLEV)
    wrcg(cg);
    wrcg(cg->next);
#  endif
}  /* RemQG_3G */
示例#9
0
static void exp3g(int n0, cgraph ** c)
{
    int       n1, n2, n4, n5;
    int       e04, e05, e45;
    cgraph * cg=*c;

    /* expand 3G vertex (see figure) - 08/01/90  */
    /* 14/03/99: Check tadpole before expanding */

#  if (CDEBLEV > DEBLEV)
    fprintf(stderr,".......Exp3G........\n");
#  endif

    n1 = findl(1,n0,cg);
    if (istadpole(n0,cg) || istadpole(n1,cg))
    {
        cg->sgn=0;
        cg->gl = 0;
        cg->vl[n0-1].vt = zv;
        cg->vl[n1-1].vt = zv;
#     if (CDEBLEV > DEBLEV)
        wrcg(cg);
#     endif
        return;
    }
    n1 = findl(1,n0,cg);      /*      v0            v4  v5     */
    n2 = findl(2,n0,cg);      /*  v1..*...v2    v1..*-<-*..v2  */
    /*      :              \ /       */
    n4 = getv(cg);            /*      :      ->       *v0      */
    e45 = ++(cg->en);         /*      :               :        */
    e04 = ++(cg->en);         /*      v3              v3       */
    cg->vl[n4-1].vt = qg;
    if (cg->vl[n1-1].vt == g3)
        rev3g(cg->vl[n0-1].e[0],&cg->vl[n1-1]);
    cg->vl[n4-1].e[0] = cg->vl[n1-1].e[0];
    cg->vl[n4-1].e[1] = e45;
    cg->vl[n4-1].e[2] = e04;
    n5 = getv(cg);
    e05 = ++(cg->en);
    cg->vl[n5-1].vt = qg;
    if (cg->vl[n2-1].vt == g3)
        rev3g(cg->vl[n0-1].e[1],&cg->vl[n2-1]);
    cg->vl[n5-1].e[0] = cg->vl[n2-1].e[0];
    cg->vl[n5-1].e[1] = e05;
    cg->vl[n5-1].e[2] = e45;
    rev3g(cg->vl[n0-1].e[2],&cg->vl[n0-1]);
    cg->vl[n0-1].vt = qg;
    cg->vl[n0-1].e[1] = e04;
    cg->vl[n0-1].e[2] = e05;
    cg->sgn*=-1;
    cg->pow2++;

    cg=addcg(c);   /*  Second term  */
    cg->vl[n0-1].e[1] = e05;
    cg->vl[n0-1].e[2] = e04;
    cg->vl[n4-1].e[1] = e04;
    cg->vl[n4-1].e[2] = e45;
    cg->vl[n5-1].e[1] = e45;
    cg->vl[n5-1].e[2] = e05;
    cg->sgn*=-1;

#  if (CDEBLEV > DEBLEV)
    wrcg(cg);
    wrcg(cg->next);
    fprintf(stderr,".......end Exp3G........\n");
#  endif
}  /* Exp3G */