亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cuddzddgroup.c

?? 主要進行大規模的電路綜合
?? C
?? 第 1 頁 / 共 3 頁
字號:
******************************************************************************/static intzddGroupSiftingUp(  DdManager * table,  int  y,  int  xLow,  Move ** moves){    Move *move;    int  x;    int  size;    int  gxtop;    int  limitSize;    int  xindex, yindex;    yindex = table->invpermZ[y];    limitSize = table->keysZ;    x = cuddZddNextLow(table,y);    while (x >= xLow) {        gxtop = table->subtableZ[x].next;        if (table->subtableZ[x].next == (unsigned) x &&	    table->subtableZ[y].next == (unsigned) y) {            /* x and y are self groups */	    xindex = table->invpermZ[x];            size = cuddZddSwapInPlace(table,x,y);#ifdef DD_DEBUG            assert(table->subtableZ[x].next == (unsigned) x);            assert(table->subtableZ[y].next == (unsigned) y);#endif            if (size == 0) goto zddGroupSiftingUpOutOfMem;            move = (Move *)cuddDynamicAllocNode(table);            if (move == NULL) goto zddGroupSiftingUpOutOfMem;            move->x = x;            move->y = y;	    move->flags = MTR_DEFAULT;            move->size = size;            move->next = *moves;            *moves = move;#ifdef DD_DEBUG	    if (pr > 0) (void) fprintf(table->out,"zddGroupSiftingUp (2 single groups):\n");#endif            if ((double) size > (double) limitSize * table->maxGrowth)		return(1);            if (size < limitSize) limitSize = size;        } else { /* group move */            size = zddGroupMove(table,x,y,moves);	    if (size == 0) goto zddGroupSiftingUpOutOfMem;            if ((double) size > (double) limitSize * table->maxGrowth)		return(1);            if (size < limitSize) limitSize = size;        }        y = gxtop;        x = cuddZddNextLow(table,y);    }    return(1);zddGroupSiftingUpOutOfMem:    while (*moves != NULL) {        move = (*moves)->next;        cuddDeallocNode(table, (DdNode *) *moves);        *moves = move;    }    return(0);} /* end of zddGroupSiftingUp *//**Function********************************************************************  Synopsis    [Sifts down a variable until it reaches position xHigh.]  Description [Sifts down a variable until it reaches position xHigh.  Assumes that x is the bottom of a group (or a singleton).  Records  all the moves.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intzddGroupSiftingDown(  DdManager * table,  int  x,  int  xHigh,  Move ** moves){    Move *move;    int  y;    int  size;    int  limitSize;    int  gxtop,gybot;    int  xindex;    /* Initialize R */    xindex = table->invpermZ[x];    gxtop = table->subtableZ[x].next;    limitSize = size = table->keysZ;    y = cuddZddNextHigh(table,x);    while (y <= xHigh) {	/* Find bottom of y group. */        gybot = table->subtableZ[y].next;        while (table->subtableZ[gybot].next != (unsigned) y)            gybot = table->subtableZ[gybot].next;        if (table->subtableZ[x].next == (unsigned) x &&	    table->subtableZ[y].next == (unsigned) y) {            /* x and y are self groups */            size = cuddZddSwapInPlace(table,x,y);#ifdef DD_DEBUG            assert(table->subtableZ[x].next == (unsigned) x);            assert(table->subtableZ[y].next == (unsigned) y);#endif            if (size == 0) goto zddGroupSiftingDownOutOfMem;	    /* Record move. */            move = (Move *) cuddDynamicAllocNode(table);            if (move == NULL) goto zddGroupSiftingDownOutOfMem;            move->x = x;            move->y = y;	    move->flags = MTR_DEFAULT;            move->size = size;            move->next = *moves;            *moves = move;#ifdef DD_DEBUG            if (pr > 0) (void) fprintf(table->out,"zddGroupSiftingDown (2 single groups):\n");#endif            if ((double) size > (double) limitSize * table->maxGrowth)                return(1);            if (size < limitSize) limitSize = size;            x = y;            y = cuddZddNextHigh(table,x);        } else { /* Group move */            size = zddGroupMove(table,x,y,moves);            if (size == 0) goto zddGroupSiftingDownOutOfMem;            if ((double) size > (double) limitSize * table->maxGrowth)		return(1);            if (size < limitSize) limitSize = size;        }        x = gybot;        y = cuddZddNextHigh(table,x);    }    return(1);zddGroupSiftingDownOutOfMem:    while (*moves != NULL) {        move = (*moves)->next;        cuddDeallocNode(table, (DdNode *) *moves);        *moves = move;    }    return(0);} /* end of zddGroupSiftingDown *//**Function********************************************************************  Synopsis    [Swaps two groups and records the move.]  Description [Swaps two groups and records the move. Returns the  number of keys in the DD table in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intzddGroupMove(  DdManager * table,  int  x,  int  y,  Move ** moves){    Move *move;    int  size;    int  i,j,xtop,xbot,xsize,ytop,ybot,ysize,newxtop;    int  swapx,swapy;#if defined(DD_DEBUG) && defined(DD_VERBOSE)    int  initialSize,bestSize;#endif#if DD_DEBUG    /* We assume that x < y */    assert(x < y);#endif    /* Find top, bottom, and size for the two groups. */    xbot = x;    xtop = table->subtableZ[x].next;    xsize = xbot - xtop + 1;    ybot = y;    while ((unsigned) ybot < table->subtableZ[ybot].next)        ybot = table->subtableZ[ybot].next;    ytop = y;    ysize = ybot - ytop + 1;#if defined(DD_DEBUG) && defined(DD_VERBOSE)    initialSize = bestSize = table->keysZ;#endif    /* Sift the variables of the second group up through the first group */    for (i = 1; i <= ysize; i++) {        for (j = 1; j <= xsize; j++) {            size = cuddZddSwapInPlace(table,x,y);            if (size == 0) goto zddGroupMoveOutOfMem;#if defined(DD_DEBUG) && defined(DD_VERBOSE)	    if (size < bestSize)		bestSize = size;#endif            swapx = x; swapy = y;            y = x;            x = cuddZddNextLow(table,y);        }        y = ytop + i;        x = cuddZddNextLow(table,y);    }#if defined(DD_DEBUG) && defined(DD_VERBOSE)    if ((bestSize < initialSize) && (bestSize < size))	(void) fprintf(table->out,"Missed local minimum: initialSize:%d  bestSize:%d  finalSize:%d\n",initialSize,bestSize,size);#endif    /* fix groups */    y = xtop; /* ytop is now where xtop used to be */    for (i = 0; i < ysize - 1; i++) {        table->subtableZ[y].next = cuddZddNextHigh(table,y);        y = cuddZddNextHigh(table,y);    }    table->subtableZ[y].next = xtop; /* y is bottom of its group, join */                                    /* it to top of its group */    x = cuddZddNextHigh(table,y);    newxtop = x;    for (i = 0; i < xsize - 1; i++) {        table->subtableZ[x].next = cuddZddNextHigh(table,x);        x = cuddZddNextHigh(table,x);    }    table->subtableZ[x].next = newxtop; /* x is bottom of its group, join */                                    /* it to top of its group */#ifdef DD_DEBUG    if (pr > 0) (void) fprintf(table->out,"zddGroupMove:\n");#endif    /* Store group move */    move = (Move *) cuddDynamicAllocNode(table);    if (move == NULL) goto zddGroupMoveOutOfMem;    move->x = swapx;    move->y = swapy;    move->flags = MTR_DEFAULT;    move->size = table->keysZ;    move->next = *moves;    *moves = move;    return(table->keysZ);zddGroupMoveOutOfMem:    while (*moves != NULL) {        move = (*moves)->next;        cuddDeallocNode(table, (DdNode *) *moves);        *moves = move;    }    return(0);} /* end of zddGroupMove *//**Function********************************************************************  Synopsis    [Undoes the swap two groups.]  Description [Undoes the swap two groups.  Returns 1 in case of  success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intzddGroupMoveBackward(  DdManager * table,  int  x,  int  y){    int size;    int i,j,xtop,xbot,xsize,ytop,ybot,ysize,newxtop;#if DD_DEBUG    /* We assume that x < y */    assert(x < y);#endif    /* Find top, bottom, and size for the two groups. */    xbot = x;    xtop = table->subtableZ[x].next;    xsize = xbot - xtop + 1;    ybot = y;    while ((unsigned) ybot < table->subtableZ[ybot].next)        ybot = table->subtableZ[ybot].next;    ytop = y;    ysize = ybot - ytop + 1;    /* Sift the variables of the second group up through the first group */    for (i = 1; i <= ysize; i++) {        for (j = 1; j <= xsize; j++) {            size = cuddZddSwapInPlace(table,x,y);            if (size == 0)                return(0);            y = x;            x = cuddZddNextLow(table,y);        }        y = ytop + i;        x = cuddZddNextLow(table,y);    }    /* fix groups */    y = xtop;    for (i = 0; i < ysize - 1; i++) {        table->subtableZ[y].next = cuddZddNextHigh(table,y);        y = cuddZddNextHigh(table,y);    }    table->subtableZ[y].next = xtop; /* y is bottom of its group, join */                                    /* to its top */    x = cuddZddNextHigh(table,y);    newxtop = x;    for (i = 0; i < xsize - 1; i++) {        table->subtableZ[x].next = cuddZddNextHigh(table,x);        x = cuddZddNextHigh(table,x);    }    table->subtableZ[x].next = newxtop; /* x is bottom of its group, join */                                    /* to its top */#ifdef DD_DEBUG    if (pr > 0) (void) fprintf(table->out,"zddGroupMoveBackward:\n");#endif    return(1);} /* end of zddGroupMoveBackward *//**Function********************************************************************  Synopsis    [Determines the best position for a variables and returns  it there.]  Description [Determines the best position for a variables and returns  it there.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intzddGroupSiftingBackward(  DdManager * table,  Move * moves,  int  size){    Move *move;    int  res;    for (move = moves; move != NULL; move = move->next) {        if (move->size < size) {            size = move->size;        }    }    for (move = moves; move != NULL; move = move->next) {        if (move->size == size) return(1);        if ((table->subtableZ[move->x].next == move->x) &&	(table->subtableZ[move->y].next == move->y)) {            res = cuddZddSwapInPlace(table,(int)move->x,(int)move->y);            if (!res) return(0);#ifdef DD_DEBUG            if (pr > 0) (void) fprintf(table->out,"zddGroupSiftingBackward:\n");            assert(table->subtableZ[move->x].next == move->x);            assert(table->subtableZ[move->y].next == move->y);#endif        } else { /* Group move necessary */	    res = zddGroupMoveBackward(table,(int)move->x,(int)move->y);	    if (!res) return(0);        }    }    return(1);} /* end of zddGroupSiftingBackward *//**Function********************************************************************  Synopsis    [Merges groups in the DD table.]  Description [Creates a single group from low to high and adjusts the  idex field of the tree node.]  SideEffects [None]******************************************************************************/static voidzddMergeGroups(  DdManager * table,  MtrNode * treenode,  int  low,  int  high){    int i;    MtrNode *auxnode;    int saveindex;    int newindex;    /* Merge all variables from low to high in one group, unless    ** this is the topmost group. In such a case we do not merge lest    ** we lose the symmetry information. */    if (treenode != table->treeZ) {	for (i = low; i < high; i++)	    table->subtableZ[i].next = i+1;	table->subtableZ[high].next = low;    }    /* Adjust the index fields of the tree nodes. If a node is the    ** first child of its parent, then the parent may also need adjustment. */    saveindex = treenode->index;    newindex = table->invpermZ[low];    auxnode = treenode;    do {	auxnode->index = newindex;	if (auxnode->parent == NULL ||		(int) auxnode->parent->index != saveindex)	    break;	auxnode = auxnode->parent;    } while (1);    return;} /* end of zddMergeGroups */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美综合| 在线观看日产精品| 26uuu精品一区二区在线观看| 日韩电影在线免费| 制服视频三区第一页精品| 日韩福利电影在线观看| 欧美一级爆毛片| 精品一区二区三区在线观看| 国产欧美日韩综合| 99精品久久只有精品| 亚洲私人黄色宅男| 欧美亚一区二区| 日产精品久久久久久久性色| 久久综合九色综合97婷婷| 国产另类ts人妖一区二区| 国产三级欧美三级日产三级99 | **网站欧美大片在线观看| 99re成人精品视频| 午夜一区二区三区视频| 日韩视频一区二区| 北条麻妃一区二区三区| 亚洲狠狠爱一区二区三区| 欧美一区欧美二区| 成人久久视频在线观看| 亚洲已满18点击进入久久| 欧美变态tickling挠脚心| 成人黄色免费短视频| 偷拍与自拍一区| 久久久五月婷婷| 日本乱码高清不卡字幕| 老司机精品视频导航| 亚洲色图.com| 日韩写真欧美这视频| caoporn国产精品| 麻豆国产精品视频| 一区二区日韩电影| 精品国产乱码久久久久久久| 一本久久综合亚洲鲁鲁五月天| 日本成人在线网站| 亚洲男同性视频| 久久亚洲精华国产精华液 | 不卡电影一区二区三区| 午夜在线成人av| 国产精品国产三级国产普通话99| 666欧美在线视频| 一本久道久久综合中文字幕| 国产精品456| 青青草原综合久久大伊人精品优势 | 欧美性xxxxxx少妇| 风间由美一区二区三区在线观看 | 一区在线观看视频| 久久综合资源网| 8x8x8国产精品| 色综合天天狠狠| 国产伦精品一区二区三区免费迷| 性久久久久久久久久久久| 亚洲人成亚洲人成在线观看图片 | 国产精品麻豆久久久| 久久嫩草精品久久久久| 日韩欧美的一区| 欧美高清视频www夜色资源网| 色狠狠综合天天综合综合| 国产成人精品亚洲午夜麻豆| 国产一区91精品张津瑜| 美国毛片一区二区| 裸体歌舞表演一区二区| 免费看日韩a级影片| 青草av.久久免费一区| 性欧美疯狂xxxxbbbb| 亚洲成人免费电影| 亚洲777理论| 亚洲chinese男男1069| 丝袜美腿一区二区三区| 亚洲成人av一区| 亚洲va国产va欧美va观看| 亚洲超碰精品一区二区| 午夜精品视频在线观看| 亚洲成av人片在线| 亚洲一区在线电影| 亚洲一区二区三区在线| 五月激情六月综合| 免费观看30秒视频久久| 精品一二三四区| 国产一区二区三区免费在线观看| 国产中文字幕精品| 国产精品一区二区三区乱码| 国产成人精品亚洲日本在线桃色| 丝袜亚洲另类丝袜在线| 欧美日韩精品一区二区三区四区 | 欧美aaaaaa午夜精品| 日韩精品一级中文字幕精品视频免费观看 | 精品88久久久久88久久久| 欧美日韩一区精品| 麻豆精品在线看| 久久精品免费观看| 日本道在线观看一区二区| 欧美成人一区二区三区片免费| 国产精品三级av| 免费在线观看不卡| 久久久久综合网| 亚洲婷婷综合色高清在线| 国产精品2024| 丝袜诱惑制服诱惑色一区在线观看| 精品一区在线看| 欧美久久久久中文字幕| 综合久久久久综合| 国产二区国产一区在线观看| 欧美高清www午色夜在线视频| 亚洲精品成人在线| 精品在线观看视频| 欧美日韩第一区日日骚| 麻豆成人在线观看| 日韩电影在线观看网站| 成人网在线播放| 日韩一区二区三区观看| 亚洲综合成人在线视频| 成人午夜电影久久影院| 日韩欧美久久久| 丝袜亚洲精品中文字幕一区| 色综合久久久久久久久久久| 国产精品蜜臀av| 国产精品1024久久| 日韩欧美黄色影院| 天天av天天翘天天综合网| 91成人免费电影| 亚洲私人影院在线观看| 9i看片成人免费高清| 中文字幕一区二区三区色视频| 国产九九视频一区二区三区| 精品国产一区二区精华| 麻豆精品国产传媒mv男同| 欧美丰满少妇xxxxx高潮对白| 亚洲综合在线免费观看| 成人午夜av在线| 中文字幕亚洲区| 成人在线综合网站| 国产女人aaa级久久久级 | 亚洲免费三区一区二区| 成人国产一区二区三区精品| 中文字幕高清不卡| 成人免费电影视频| 国产精品伦一区| 成人av电影在线| 亚洲色大成网站www久久九九| 99精品视频一区| 亚洲欧美aⅴ...| 7777精品伊人久久久大香线蕉经典版下载 | 日韩一区二区三免费高清| 日韩电影在线观看一区| 日韩免费视频一区二区| 国产自产视频一区二区三区| 国产日韩av一区| 99久久精品国产毛片| 亚洲欧美经典视频| 欧美人牲a欧美精品| 视频一区中文字幕国产| 日韩三级视频在线观看| 国产精品91一区二区| 亚洲欧洲日韩一区二区三区| 99精品视频在线观看免费| 亚洲国产精品久久不卡毛片| 欧美一区二区在线观看| 国产麻豆视频一区二区| 成人欧美一区二区三区视频网页| 色综合天天做天天爱| 国产精品萝li| 欧美日韩在线精品一区二区三区激情| 日本在线不卡一区| 在线观看免费成人| 色88888久久久久久影院野外| 国产美女精品人人做人人爽| 日韩免费在线观看| 久久午夜电影网| 国产日产欧美一区二区视频| 久久先锋影音av鲁色资源 | 久久久久久黄色| 91精品一区二区三区在线观看| 色婷婷久久99综合精品jk白丝| 91视视频在线观看入口直接观看www | 高清在线不卡av| 一区二区三区在线免费观看| 制服丝袜亚洲色图| 成人一区二区三区中文字幕| 亚洲成人1区2区| 亚洲国产激情av| 欧美中文字幕一区二区三区| 九九国产精品视频| 一区二区三区在线影院| 精品日韩99亚洲| 色88888久久久久久影院野外| 日韩中文字幕av电影| 久久精品日产第一区二区三区高清版| 91色porny在线视频| 国产美女精品在线| 亚洲成人激情自拍| 国产精品视频第一区| 日韩欧美久久久| 91在线无精精品入口| 蜜乳av一区二区| 亚洲一区二区三区视频在线播放|