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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? h_prf.c

?? 最大流
?? C
字號:
/* Maximal flow - Push-Relabel algorithm */
/* Highest level */
/* Stanford Computer Science Department */
/* Boris Cherkassky - cher@theory.stanford.edu, on.cher@zib-berlin.de */
/* Andrew V. Goldberg - goldberg@cs.stanford.edu */

#define BIGGEST_FLOW MAXLONG
#define MIN( a, b ) ( ( (a) < (b) ) ? a : b )
#define GLOB_UPDT_FREQ 1.0

#define WHITE 0
#define GREY 1
#define BLACK 2

/* global variables */

long   n;                    /* number of nodes */
node   *nodes;               /* array of nodes */
arc    *arcs;                /* array of arcs */
layer  *layers;              /* array of layers */
long   *cap;                 /* array of capasities */
node   *source;              /* origin */
node   *sink;                /* destination */
node   **queue;              /* queue for storing nodes */
node   **q_read, **q_write;  /* queue pointers */
long   lmax;                 /* maximal layer */
long   lmax_push;            /* maximal layer with excess node */
long   lmin_push;            /* minimal layer with excess node */


/*--- initialization */

int pr_init ( n_p, nodes_p, arcs_p, cap_p, source_p, sink_p )

long    n_p;       /* number of nodes */
node    *nodes_p;  /* array of nodes */
arc     *arcs_p;   /* array of arcs */
long    *cap_p;    /* array of capasitiies */
node    *source_p; /* origin          */
node    *sink_p;   /* destination     */

{
node  *i;        /* current node */

n      = n_p;
nodes  = nodes_p;
arcs   = arcs_p;
cap    = cap_p;
source = source_p;
sink   = sink_p;

queue = (node**) calloc ( n, sizeof (node*) );
if ( queue == NULL ) return ( 1 );

layers = (layer*) calloc ( n+2, sizeof (layer) );
if ( layers == NULL ) return ( 1 );

for ( i = nodes; i < nodes + n; i++ )
  i -> excess = 0;

source -> excess = BIGGEST_FLOW;

lmax = n-1;

return ( 0 );

} /* end of initialization */


/*--- global rank update - breadth first search */

void def_ranks ()

{

node  *i, *j, *jn;  /* current nodes */
arc   *a;           /* current arc   */
layer *l;           /* current layer */
long  j_rank;       /* rank of node j */

n_up ++; /* statistics */

/* initialization */

for ( i = nodes; i < nodes + n; i ++ )
  i    -> rank = n;

  sink -> rank = 0;

*queue = sink;

for ( l = layers; l <= layers + lmax; l++ )
  {
    l -> push_first   = NULL;
    l -> trans_first  = NULL;
  }

lmax = lmax_push = 0;
       lmin_push = n;

/* breadth first search */

for ( q_read = queue, q_write = queue + 1;
      q_read != q_write;
      q_read ++
    )
   { /* scanning arcs incident to node i */

    i = *q_read;
    j_rank = ( i -> rank ) + 1;

    for ( a = i -> first; a != NULL; a = a -> next )
      {
        j = a -> head;

        if ( j -> rank == n )
          /* j is not labelled */

          if ( ( ( a -> sister ) -> r_cap ) > 0 )
    	{ /* arc (j, i) is not saturated */

    	  j -> rank    = j_rank;
    	  j -> current = j -> first;

	  l = layers + j_rank;
	  if ( j_rank > lmax ) lmax = j_rank;

	  if ( ( j -> excess ) > 0 )
	    {
	      j -> nl_next     = l -> push_first;
	      l -> push_first  = j;
	      if ( j_rank > lmax_push ) lmax_push = j_rank;
	      if ( j_rank < lmin_push ) lmin_push = j_rank;
	    }
	  else /* j -> excess == 0 */
	    {
	      jn = l -> trans_first;
	      j -> nl_next     = jn;
	      if ( jn != NULL )
		jn -> nl_prev = j;
	      l -> trans_first  = j;
	    }

    	  *q_write = j; q_write ++; /* put j  to scanning queue */
    	}
      } /* node "i" is scanned */
  } /* end of scanning queue */

} /* end of global update */

#include "phase2.c"
/*--- cleaning beyond the gap */

int gap ( le )

layer *le;        /* pointer to the empty layer */

{

layer *l;          /* current layer */
node  *i;          /* current nodes */
long  r;           /* rank of the layer before l  */
int   cc;          /* cc = 1 - no nodes with positive excess before
		      the gap */

n_gap ++; /* statistics */

r = ( le - layers ) - 1;

/* putting ranks beyond the gap to "infinity" */

for ( l = le + 1; l <= layers + lmax; l ++ )
  {
    for ( i = l -> push_first; i != NULL; i = i -> nl_next )
{
      i -> rank = n;
n_gnode ++; /* statistics */
}

    for ( i = l -> trans_first; i != NULL; i = i -> nl_next )
{
      i -> rank = n;
n_gnode ++; /* statistics */
}

    l -> push_first = l -> trans_first = NULL;
  }

cc = ( lmin_push > r ) ? 1 : 0;

lmax = r;
lmax_push = r;

return ( cc );

} /* end of gap */


/*--- pushing flow from node  i  */

int push ( i )

node  *i;      /* outpushing node */

{

node  *j;                /* sucsessor of i */
node  *j_next, *j_prev;  /* j's sucsessor and predecessor in layer list */
long  j_rank;            /* rank of the next layer */
layer *lj;               /* j's layer */
arc   *a;                /* current arc (i,j) */
long  fl;                /* flow to push through the arc */

j_rank = (i -> rank) - 1;

/* scanning arcs outgoing from  i  */

for ( a = i -> current; a != NULL; a = a -> next )
  {
    if ( a -> r_cap > 0 ) /* "a" is not saturated */
      {
	j = a -> head;

	if ( j -> rank == j_rank )
	  { /* j belongs to the next layer */

	    fl = MIN ( i -> excess, a -> r_cap );

	    a             -> r_cap -= fl;
	    (a -> sister) -> r_cap += fl;
n_push ++; /* statistics */

	    if ( j_rank > 0 )
	      {
		lj = layers + j_rank;

		if ( j -> excess == 0 )
		  { /* before current push  j  had zero excess */
		
		    /* remove  j  from the list of transit nodes */
		    j_next = j -> nl_next;
		
		    if ( lj -> trans_first == j )
		      /* j  starts the list */
		      lj -> trans_first = j_next;
		    else
		      { /* j  is not the first */
			j_prev = j -> nl_prev;
			j_prev -> nl_next = j_next;
			if ( j_next != NULL )
			  j_next -> nl_prev = j_prev;
		      }

		    /* put  j  to the push-list */
		    j -> nl_next = lj -> push_first;
		    lj -> push_first = j;

		    if ( j_rank < lmin_push )
		      lmin_push = j_rank;

		  } /* j -> excess == 0 */

	      } /* j -> rank > 0 */

	    j -> excess += fl;
	    i -> excess -= fl;

	    if ( i -> excess == 0 ) break;

	  } /* j belongs to the next layer */
      } /* a  is not saturated */
  } /* end of scanning arcs from  i */

i -> current = a;

return ( ( a == NULL ) ? 1 : 0 );

} /* end of push */

/*--- relabelling node i */

long relabel ( i )

node *i;   /* node to relabel */

{

node  *j;        /* sucsessor of i */
long  j_rank;    /* minimal rank of a node available from j */
arc   *a;        /* current arc */
arc   *a_j;      /* an arc which leads to the node with minimal rank */
layer *l;        /* layer for node i */

n_rel ++; /* statistics */

i -> rank = j_rank = n;

/* looking for a node with minimal rank available from i */

for ( a = i -> first; a != NULL; a = a -> next )
  {
    if ( a -> r_cap > 0 )
      {
	j = a -> head;

	if ( j -> rank < j_rank )
	  {
	    j_rank = j -> rank;
	    a_j    = a;
	  }
      }
  }

j_rank++;
if ( j_rank < n )
  {
    /* siting  i  into the manual */

    i -> rank    =  j_rank;
    i -> current = a_j;

    l = layers + j_rank;

    if ( i -> excess > 0 )
      {
        i -> nl_next = l -> push_first;
        l -> push_first = i;
        if ( j_rank > lmax_push ) lmax_push = j_rank;
        if ( j_rank < lmin_push ) lmin_push = j_rank;
      }
    else
      {
        j = l -> trans_first;
	i -> nl_next = j;
	if ( j != 0 ) j -> nl_prev = i;
	l -> trans_first = i;
      }

    if ( j_rank > lmax ) lmax = j_rank;

  } /* end of j_rank < n */

return ( j_rank );

} /* end of relabel */


/*--- head program */

int prflow ( n_p, nodes_p, arcs_p, cap_p, source_p, sink_p, fl )

long   n_p;         /* number of nodes */
node   *nodes_p;    /* array of nodes */
arc    *arcs_p;     /* array of arcs  */
long   *cap_p;      /* capasity */
node   *source_p;   /* origin */
node   *sink_p;     /* destination */
double *fl;         /* flow amount*/

{

node   *i;          /* current node */
node   *j;          /* i-sucsessor in layer list */
long   i_rank;      /* rank of  i */
layer  *l;          /* current layer */
long   n_r;         /* the number of relabels */
int    cc;          /* condition code */

int ii=0;

cc = pr_init ( n_p, nodes_p, arcs_p, cap_p, source_p, sink_p );

if ( cc ) return ( cc );

def_ranks ();

n_r = 0;

/* highest level method */

while ( lmax_push >= lmin_push ) /* main loop */
  {
    l = layers + lmax_push;

    i = l -> push_first;


    if ( i == NULL )
      { /* nothing to push from this level */

	lmax_push --;
      }
    else
      {
	l -> push_first = i -> nl_next;

	cc = push ( i );

	if ( cc )
	  { /* i must be relabeled */

	    relabel ( i );
	    n_r ++;

            if ( l -> push_first == NULL &&
		 l -> trans_first == NULL
               )
	      { /* gap is found */
                gap ( l );
	      }

	    /* checking the necessity of global update */
	    if ( n_r > GLOB_UPDT_FREQ * (float) n )
	      { /* it is time for global update */
		def_ranks ();
		n_r = 0;
	      }
	  }
	else
	  { /* excess is pushed out of  i  */

	    j = l -> trans_first;
	    i -> nl_next = j;
	    l -> trans_first = i;
	    if ( j != NULL ) j -> nl_prev = i;
	  }
      }

  } /* end of the main loop */

*fl += sink -> excess;

t2 = timer() - t2;

prefl_to_flow ( );

return ( 0 );

} /* end of constructing flow */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品综合久久久久久8888| 日韩欧美在线不卡| 美腿丝袜亚洲一区| 中文字幕在线观看一区| 91精品国产色综合久久ai换脸 | 久久久久久久久久久久久女国产乱 | 国产精品一区二区三区99| 一区二区视频在线| 国产色91在线| 欧美大片在线观看一区| 欧美中文字幕亚洲一区二区va在线 | 久久久久久久久伊人| 91精品国产综合久久香蕉麻豆 | 91精品国产综合久久久久久| 一本高清dvd不卡在线观看| 国产精品影视网| 麻豆国产精品一区二区三区 | 欧美丰满美乳xxx高潮www| 91视频一区二区| 国产成人综合网站| 激情图区综合网| 日韩精品1区2区3区| 亚洲风情在线资源站| 亚洲欧美日本韩国| 中文字幕日韩av资源站| 欧美国产日韩亚洲一区| xnxx国产精品| 精品粉嫩超白一线天av| 日韩欧美不卡在线观看视频| 欧美日韩国产一区二区三区地区| 色偷偷久久人人79超碰人人澡| jvid福利写真一区二区三区| 国产99一区视频免费| 国产成人av一区二区三区在线| 精品一区精品二区高清| 国产自产高清不卡| 国产精品综合在线视频| 国产成人在线影院| 高清av一区二区| 国产69精品久久777的优势| 国产不卡视频一区| www.日本不卡| 色94色欧美sute亚洲线路一ni| 色综合久久久久综合体桃花网| 91网上在线视频| 久88久久88久久久| 欧美久久久一区| 日韩成人av影视| 91亚洲精品久久久蜜桃| 亚洲国产精品久久久久婷婷884 | 国产麻豆精品一区二区| 国产精品成人网| 欧美一区二区三区在线电影| 99久久精品国产网站| 国产女同互慰高潮91漫画| 欧美国产日产图区| 亚洲欧洲av一区二区三区久久| 最新热久久免费视频| 亚洲理论在线观看| 午夜精品久久久久久久久久 | 在线一区二区视频| 欧美三级视频在线观看| 欧美一级黄色大片| 国产女人水真多18毛片18精品视频| 国产精品女主播av| 一区二区三区视频在线看| 天天爽夜夜爽夜夜爽精品视频| 日本欧美在线看| 国产盗摄女厕一区二区三区| 91丨九色丨蝌蚪富婆spa| 欧美图区在线视频| 欧美成人精品3d动漫h| 国产午夜一区二区三区| 欧美一级专区免费大片| 一区二区三区四区中文字幕| 日韩视频一区二区三区在线播放 | 一区二区三区自拍| 日韩国产高清影视| 国产成人8x视频一区二区 | 91视频精品在这里| 91麻豆精品国产91久久久资源速度| 精品国产乱码久久久久久图片| 国产精品免费看片| 肉色丝袜一区二区| 成人精品免费看| 欧美日韩国产精品自在自线| 国产性做久久久久久| 亚洲国产精品一区二区尤物区| 国产精品一区二区男女羞羞无遮挡 | 免费成人结看片| 99re热这里只有精品视频| 欧美高清视频在线高清观看mv色露露十八| 日韩女优制服丝袜电影| 一区二区三区在线不卡| 国产一二精品视频| 欧美日本国产视频| 亚洲天堂成人在线观看| 美女视频一区二区| av不卡免费在线观看| 日韩一级片网站| 一区二区三区美女| 国产成人高清视频| 欧美tk—视频vk| 亚洲电影中文字幕在线观看| 大美女一区二区三区| 日韩一级免费观看| 亚洲天堂福利av| 国产精品九色蝌蚪自拍| 日本不卡一区二区三区高清视频| 91香蕉视频mp4| 久久久三级国产网站| 蜜桃91丨九色丨蝌蚪91桃色| 欧美午夜精品一区二区三区| 日本一二三四高清不卡| 另类调教123区| 欧美丰满美乳xxx高潮www| 亚洲国产中文字幕在线视频综合 | 美女被吸乳得到大胸91| 欧美日韩日日骚| 一区二区三区成人| 99r精品视频| 国产精品热久久久久夜色精品三区 | 国产成人免费在线观看不卡| 日韩免费性生活视频播放| 爽爽淫人综合网网站| 欧美亚洲高清一区二区三区不卡| 亚洲欧洲精品一区二区三区| 国产成人啪免费观看软件| 久久久久久免费毛片精品| 极品少妇一区二区三区精品视频| 日韩亚洲电影在线| 蜜臀99久久精品久久久久久软件| 欧美日韩极品在线观看一区| 一区二区三区中文在线观看| 色综合天天综合色综合av| 亚洲视频一区在线观看| 91小宝寻花一区二区三区| 亚洲三级久久久| 色婷婷综合久久久久中文一区二区| 国产精品家庭影院| 91在线精品秘密一区二区| 亚洲国产精品传媒在线观看| 国产成人超碰人人澡人人澡| 国产精品麻豆视频| 91福利在线看| 在线视频一区二区三区| 亚洲欧美另类久久久精品2019| 不卡一区二区在线| 亚洲欧美激情插| 欧美日韩一区二区三区免费看 | 国产在线不卡视频| 久久久综合激的五月天| 风间由美一区二区av101| 综合欧美亚洲日本| 欧美日韩在线精品一区二区三区激情| 亚洲国产另类精品专区| 欧美哺乳videos| 国产高清不卡一区| 亚洲免费观看高清完整版在线观看熊| 91久久免费观看| 蜜臀av一区二区在线免费观看| 久久一区二区三区四区| 99久久99久久精品免费观看| 亚洲综合一区二区精品导航| 91精品国产综合久久香蕉的特点 | 久久午夜电影网| eeuss鲁一区二区三区| 亚洲午夜成aⅴ人片| 欧美成人精品二区三区99精品| 福利一区福利二区| 亚洲综合视频在线| 久久综合一区二区| 日本乱码高清不卡字幕| 久久国产精品免费| 亚洲免费毛片网站| 日韩精品在线网站| 91丝袜美腿高跟国产极品老师| 亚洲chinese男男1069| 精品国产一区二区三区忘忧草 | 午夜激情一区二区| 久久久精品2019中文字幕之3| 色一情一伦一子一伦一区| 日产国产高清一区二区三区| 国产欧美日韩激情| 欧美无砖专区一中文字| 国产美女精品在线| 亚洲一区二区av在线| 欧美精品视频www在线观看| 亚洲一二三级电影| 国产清纯美女被跳蛋高潮一区二区久久w| 丁香婷婷深情五月亚洲| 亚洲成a天堂v人片| 国产精品午夜免费| 91精品国产综合久久久久久久| 99久久久久久| 国产美女一区二区三区| 日韩成人午夜精品| 亚洲欧美激情小说另类| 久久久91精品国产一区二区三区| 欧美色大人视频|