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

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

?? routopt.c

?? 一個linux下的各種組播路由算法編程
?? C
字號:
#define not_in_tree 0
#define temp_in_tree 1
#define perm_in_tree 2

double TheNodeList::routerOPT(int alg, Node *source, int addr,  double &d, 
			     double &maxd, double &mind, 
			     double &h, double &nodes) {

  //An optimal branch and bound algorithm for the constrained Steiner tree 
  //problem. I believe it is optimal only for undirected graphs;

  //First delete any previous routing for the this group and source set.
  removeTree(source, addr);

  //Locate the source to get the peak rate
  SourceList *ss = source->sourceList();
  int found = False;
  while ((ss != NULL) && (found == False)) {
    if ((ss->source()->type() != Background) &&
	(ss->source()->address() == addr)) found = True;
    else ss = ss->next();
  };
  double pk = ss->source()->peak();
  double avg = ss->source()->average();
  
  //Locate the MC group that contains the destination set
  MCGroup *group = groupsHd;
  while ((group !=  NULL) && (group->address() != addr))   
    group = group->next();
  
  if (group != NULL)  {
    int grCount = group->count();
    if ((grCount == 1) && 
	(group->headm()->nodePtr()->name() == source->name())) {
      source->addRoutingEntry(addr, source);
      h = d = maxd = mind = 0;
      nodes = 1;
      return(0);
    };
    
    int found = False;
    NodeListEntry *tmp = group->headm();
    while ((tmp != NULL) && (found == False)) {
      if (tmp->nodePtr()->name() == source->name()) {
	found = True;
	grCount--;
      };
      tmp = tmp->next();
    };
    int *gr_matrix = new int[grCount];
    int i = 0;
    tmp = group->headm();
    while (tmp != NULL) {
      if (tmp->nodePtr()->name() != source->name())
	*(gr_matrix + i++) = tmp->nodePtr()->name();
      tmp = tmp->next();
    };

    int links = 0;
    tmp = nodeListHd;
    while (tmp != NULL) {
      AdjacencyListEntry *adj = tmp->nodePtr()->adjacentNodes();
      while (adj != NULL) {
	if ((((fn == PEAK) && (adj->peak() <= 
			       ((adj->linkCapacity() * ADMITRATIO) - pk))) ||
	    ((fn == AVERAGE) && (adj->average() <= 
				 ((adj->linkCapacity() * ADMITRATIO) - avg))))
	    && (adj->delay() < DELAYBOUND)) { 
	  links++;
	};
	adj = adj->next();
      };
      tmp = tmp->next();
    };
    
    int *head = new int[links];
    int *tail = new int[links];
    int *deg = new int[num];
    for (i = 0; i < num; i++) *(deg + i) = 0;
    double *delay = new double[links];
    double *cost = new double[links];

    int j = 0;
    tmp = nodeListHd;
    while (tmp != NULL) {
      i = tmp->nodePtr()->name();
      AdjacencyListEntry *adj1 = tmp->nodePtr()->adjacentNodes();
      while (adj1 != NULL) {

	if ((fn == PEAK) && (adj1->peak() <= 
			     ((adj1->linkCapacity() * ADMITRATIO) - pk))) { 
	                       //in order to eliminate links saturated links
	  if (adj1->delay() < DELAYBOUND) {
	    *(tail + j) = i;
	    *(head + j) = adj1->nodePtr()->name();
	    *(delay + j) = adj1->delay();
	    *(cost + j) = adj1->peak();
	    (*(deg + *(head + j)))++;
	    j++;
	  };
	}
	else if ((fn == AVERAGE) && (adj1->average() <= 
				((adj1->linkCapacity() * ADMITRATIO) - avg))) {
	                       //in order to eliminate links saturated links
	  if (adj1->delay() < DELAYBOUND) {				     
	    *(tail + j) = i;
	    *(head + j) = adj1->nodePtr()->name();
	    *(delay + j) = adj1->delay();
	    *(cost + j) = adj1->average();
	    (*(deg + *(head + j)))++;
	    j++;
	  };
	};
	adj1 = adj1->next();
      };
      tmp = tmp->next();
    };

    double *minwt_at_node = new double[num];
    int **adj = new  (int *)[num];
    int k;
    for (i = 0; i < num; i++) {
      k = 0;
      if (*(deg + i) > 0) *(adj + i) = new int[*(deg + i)];
      else *(adj + i) = NULL;	      
      for (j = 0; j < links; j++) {
        if (*(head + j) == i) {
	  *(*(adj + i) + k) = j;
	  k++;
	};
      };
      if (k > 1) sort(i, k, cost, *(adj + i));
      *(minwt_at_node + i) = *(cost + *(*(adj + i))); 
    };

    int *child = new int[num * grCount];
    for (i = 0; i < num; i++)
      for (j = 0; j < grCount; j++)  *(child + (i * grCount) + j) = INT_MAX;;

    double *sp = new double[num*num];
    int i0;
    double  spp;
    for (i = 0; i < num; i++)
      for (j = 0; j < num; j++) *(sp + (i * num) + j) = DBL_MAX;
    for (i = 0; i < num; i++) *(sp +(i * num) + i) = 0.0;
    
    for (j = 0; j < links; j++)
      *(sp + (*(tail + j) * num) + *(head + j)) = *(delay + j);
    
    for (i0 = 0; i0 < num; i0++) {
      for (i = 0; i < num; i++) {
	for (j = 0; j < num; j++) {
	  spp = *(sp + (i * num) + i0) + *(sp + (i0 * num) + j);
	  if (*(sp + (i * num) + j) > spp) *(sp + (i * num) + j) = spp;
	};
      };
    };

    double ub_now = DBL_MAX;
    int destn = *gr_matrix;
    int pos = 0;
    double *node_delay = new double[num];
    double *perm_delay = new double[num];
    int *tree = new int[num];
    for (i = 0; i < num; i++) {
      *(tree + i) = not_in_tree;
      *(node_delay + i) = 0.0;
    };
    node_delay[destn] = 0.0;
    int nodes_visited = 0;
    int *from = new int[num];
    int *to = new int[num];
    for (i = 0; i < num; i++) *(from + i) = *(to + i) = INT_MAX;
    bandb(alg, source->name(), destn, destn, pos, adj, node_delay, 
	  perm_delay, deg, cost, delay, head, tail, sp, nodes_visited,
	  ub_now, grCount, gr_matrix, tree, from, to, links, child,
	  minwt_at_node);
    delete [] gr_matrix;
    delete [] head;
    delete [] tail;
    delete [] deg;
    delete [] cost;
    delete [] delay;
    delete [] sp;
    delete [] child;
    delete [] minwt_at_node;
    for (i = 0; i < num; i++) delete [] *(adj + i);
    delete [] adj;
    delete [] node_delay;
    delete [] perm_delay;
    delete [] tree;
    if (ub_now == DBL_MAX) {
      delete [] from;
      delete [] to;
      return(SATORDB);
    }
    else {
      //Create a routing table entry for each MC group member;
      tmp = group->headm();
      while (tmp != NULL) {
	tmp->nodePtr()->addRoutingEntry(addr, source);
	tmp = tmp->next();
      };

      //Create the actual MC tree;
      i = 0;
      nodes = 1;
      while (*(from + i) != INT_MAX) {
	nodes++;
	Node *nd = nodeOf(*(to + i));
	Node *nd2 = nodeOf(*(from + i));
	AdjacencyListEntry *adj = nd2->adjacentNodes();
	while (adj->nodePtr() != nd) adj = adj->next();
	//update the link cost;
	double wght = adj->peak() + pk;
	adj->peak(wght);
	double average = adj->average() + avg;
	adj->average(average);

	//and add it to the routing table of the best connection node;
	nd2->addChild(addr, source, nd);
	i++;
      };
      delete [] from;
      delete [] to;

      maxd = 0;
      mind = DBL_MAX;
      int dbViolation = False;
      //calculate the expected end-to-end delay and the average number of hops;
      //and the cost per destination;
      NodeListEntry *tmp2 = group->headm();
      double avgDelay = 0;
      double avgHops = 0;
      while (tmp2 != NULL) {
	int gotit = False;
	int hops = 0;
	double delay = 0;
	if (source != tmp2->nodePtr()) 
	  results(source, addr, source, tmp2->nodePtr(), delay, hops, gotit);   
	if (delay >= DELAYBOUND) dbViolation = True;
	if (delay > maxd) maxd = delay;
	if (delay < mind) mind = delay;
	avgDelay += delay;
	avgHops += hops;
	tmp2 = tmp2->next();
      };
      avgDelay /= group->count();
      avgHops /= group->count();
      d = avgDelay;
      h = avgHops;
      
      if ((DBV == True) && (dbViolation == True)) {
	removeTree(source, addr);
	return(DBVIOL);
      }
      else return(ub_now);
    };
  }
  else return(NOGROUP);
};

void TheNodeList::sort(int node, int degree, double *cost, int *adj) {

  int i, j, temp;
  for (i = 1; i < degree; i++) {
    for (j = i; j != 0 ; j--) {
      if (*(cost + *(adj + j)) < *(cost + *(adj + j - 1))) {
	temp = *(adj + j);
	*(adj + j) = *(adj + j - 1);
	*(adj + j - 1) = temp;
      };
    };
  };
};

void TheNodeList::bandb(int alg, int srce, int destn, 
			int node, int pos, int **adj,
			double *node_delay, double *perm_delay, int *deg, 
			double *cost, double *delay, int *head, int *tail, 
			double *sp, int &nodes_visited, double &ub_now,
			int grCount, int *gr_matrix, int *tree,
			int *from, int *to, int links, int *child,
			double *minwt_at_node) {

  int arc,count,child_v,r,r1,r2,vertx,j,deg_d,parent,t_parent;
  double lb_here,delay_temp1,delay_temp2;

  if(node == srce) *(perm_delay + srce) = 0.0;
  if (pos == 0) *(tree + srce) = not_in_tree;
  deg_d = *(deg + node);

  if ((node != srce) && (*(tree + node) == not_in_tree)) {
    nodes_visited++;
    for (r = 0; r < deg_d; r++) {
      arc = *(*(adj + node) + r);
      *(tree + node) = temp_in_tree;
      parent = *(tail + arc);

      t_parent = *(tree + parent);
      //Find the reverse arc
      lb_here = lb(pos, grCount, head, tail, child, tree, cost, 
		   minwt_at_node, gr_matrix, links) + *(cost + arc);

      if (lb_here < ub_now) {  

	delay_temp1 = *(node_delay + node) + *(delay + arc);
	if (t_parent == perm_in_tree) 
	  delay_temp2 = *(perm_delay + parent) + delay_temp1;
	if (t_parent == not_in_tree) 
	  delay_temp2 = *(sp + (srce * num) + parent) + delay_temp1;

	r1 = 2;
	if (alg == copt) {
	  if (t_parent==not_in_tree && delay_temp2<DELAYBOUND) r1=1;
	  if (t_parent==not_in_tree && delay_temp2>=DELAYBOUND) r1=2;
	  if (t_parent==temp_in_tree) r1=2;
	  if (t_parent==perm_in_tree && delay_temp2<DELAYBOUND) r1=3;
	  if (t_parent==perm_in_tree && delay_temp2>=DELAYBOUND) r1=2;
	}
	else {
	  if (t_parent==not_in_tree) r1=1;
	  if (t_parent==temp_in_tree) r1=2;
	  if (t_parent==perm_in_tree) r1=3;
	};

	switch(r1){
	case 1: /*  incoming_edge = arc  */
	  *(node_delay + parent) = delay_temp1;    
	  *(child + (parent * grCount) + pos) = node;
	  bandb(alg, srce, destn, parent, pos, adj, node_delay, 
		perm_delay, deg, cost, delay, head, tail, sp, nodes_visited,
		ub_now, grCount, gr_matrix, tree, from, to, links,
		child, minwt_at_node);
	  *(child + (parent * grCount)  + pos) = INT_MAX;
	  break;
	case 2: break;
	case 3: /*  incoming_edge = arc  */
	  *(child + (parent * grCount) + pos) = node;
	  bandb(alg, srce, destn, parent, pos, adj, node_delay, 
		perm_delay, deg, cost, delay, head, tail, sp, nodes_visited,
		ub_now, grCount, gr_matrix, tree, from, to, links,
		child, minwt_at_node);
	  *(child + (parent * grCount)  + pos) = INT_MAX;
	  break;
	}; /* end switch */
      }  /* end if */
      else break;  	/*  break from for loop  */
    }; /* end for */
    *(tree + node) = not_in_tree;
    *(node_delay + node) = 0.0; 
  } /* end if */
  r2 = 3;
  if ((*(tree + node) == perm_in_tree) && (node == destn)) r2 = 1;
  if (((node == srce) || (*(tree + node) == perm_in_tree)) &&
      (node != destn)) r2 = 2;

  switch(r2){
  case 2:
    *(tree + node) = perm_in_tree;
    vertx = node;
    
    while (*(child + (vertx * grCount) + pos) != INT_MAX) {
      child_v = *(child + (vertx * grCount) + pos);
      deg_d = *(deg + child_v);
      for (r1 = 0; r1 < deg_d; r1++)
	if (*(tail + *(*(adj + child_v) + r1)) == vertx) 
	  j = *(*(adj + child_v) + r1);
      *(perm_delay + child_v) = *(perm_delay + vertx) + *(delay + j);
      vertx = child_v;
      *(tree + vertx) = perm_in_tree;
    };

    if (pos < (grCount - 1)) {
      *(child + (destn * grCount) + pos) = INT_MAX;
      pos++;
      destn = *(gr_matrix + pos);
      bandb(alg, srce, destn, destn, pos, adj, node_delay, 
	    perm_delay, deg, cost, delay, head, tail, sp, nodes_visited,
	    ub_now, grCount, gr_matrix, tree, from, to, links,
	    child, minwt_at_node);
      pos--; 
      destn = *(gr_matrix + pos);
    }
    else {
      lb_here = lb(pos, grCount, head, tail, child, tree, cost, 
		   minwt_at_node, gr_matrix, links);
      if (lb_here < ub_now) {
	ub_now = lb_here;  /* update upper bd */
	int i, k = 0;
	for (j = 0; j < grCount; j++) {
	  for (i = 0; i < num; i++) {
	    if (*(child + (i * grCount) + j) != INT_MAX) {
	      *(from + k) = i;
	      *(to +k++) = *(child + (i * grCount) + j);
	    };
	  };
	};
	*(from + k) = *(to + k) = INT_MAX;
      };
    };
    vertx = node;
    /* count = 0; */
    while (*(child + (vertx * grCount) + pos) != INT_MAX) {
      child_v = *(child + (vertx * grCount) + pos);
      *(tree + child_v) = temp_in_tree;
      vertx = child_v;
    };
    break;
    
  case 1:
    if (pos < (grCount - 1)) {
      *(child + (destn * grCount) + pos) = INT_MAX;
      pos++;
      destn = *(gr_matrix + pos);
      bandb(alg, srce, destn, destn, pos, adj, node_delay, 
	    perm_delay, deg, cost, delay, head, tail, sp, nodes_visited,
	    ub_now, grCount, gr_matrix, tree, from, to, links,
	    child, minwt_at_node);
      pos--; 
      destn = *(gr_matrix + pos);
    }
    else {
      lb_here = lb(pos, grCount, head, tail, child, tree, cost, 
		   minwt_at_node, gr_matrix, links);
      if (lb_here < ub_now) {
	ub_now = lb_here;  /* update upper bd */
	ub_now = lb_here;  /* update upper bd */
	int i, k = 0;
	for (j = 0; j < grCount; j++) {
	  for (i = 0; i < num; i++) {
	    if (*(child + (i * grCount) + j) != INT_MAX) {
	      *(from + k) = i;
	      *(to + k++) = *(child + (i * grCount) + j);
	    };
	  };
	};
	*(from + k) = *(to + k) = INT_MAX;
      };
    };
    break;

  case 3: break;
  };
};

double TheNodeList::lb(int curr_pos, int grCount, int *head, int *tail,
		       int *child, int *tree, double *cost,
		       double *minwt_at_node, int *gr_matrix, int links) {
  int tj, hj, j, pos;
  double lbd;
  
  lbd = 0.0;
  for (j = 0; j < links; j++) {
    hj = *(head + j);
    tj = *(tail + j);
    int child_hj_tj = False;
    for (pos = 0; pos < grCount; pos++) {
      if (*(child + (tj * grCount) + pos) == hj)
	child_hj_tj = True;
    };
    if ((*(tree + hj) == temp_in_tree) && (*(tree + tj) == temp_in_tree) &&
	(child_hj_tj == True)) lbd += *(cost + j);
    if ((*(tree + hj) == perm_in_tree) && (*(tree + tj) == perm_in_tree) &&
	(child_hj_tj == True)) lbd += *(cost + j);
  }; /* end for */

  for (pos = curr_pos; pos <  grCount; pos++)
    if (*(tree + *(gr_matrix + pos)) == not_in_tree) 
      lbd += *(minwt_at_node + *(gr_matrix + pos));
  return lbd;
};








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久一| 欧美一区二区三区四区高清| 男男gaygay亚洲| 一区二区三区在线观看国产| 日韩一区在线看| 亚洲四区在线观看| 亚洲美女视频一区| 亚洲一区二区在线免费观看视频| 中文字幕在线一区免费| 中文字幕欧美激情一区| 中文字幕精品一区二区精品绿巨人 | 国产欧美1区2区3区| 久久五月婷婷丁香社区| 久久久国产综合精品女国产盗摄| 精品国产亚洲一区二区三区在线观看| 日韩精品一区二区三区在线播放| 欧美成人女星排行榜| 久久久不卡影院| 中文字幕欧美日韩一区| 一区二区三区在线播放| 午夜精品福利一区二区蜜股av| 日韩av中文字幕一区二区三区| 日韩av电影免费观看高清完整版| 久久福利视频一区二区| 国产mv日韩mv欧美| 色综合天天在线| 欧美日韩精品系列| 26uuu精品一区二区| 中文字幕欧美三区| 亚洲成人av一区二区三区| 久久精品国产一区二区三区免费看| 国产在线精品免费| 一本到不卡精品视频在线观看| 欧美视频自拍偷拍| 久久久久国色av免费看影院| 亚洲免费观看在线观看| 人人超碰91尤物精品国产| 久久精品国产成人一区二区三区 | 亚洲午夜久久久久久久久电影院| 日韩精品亚洲专区| 国产黄色91视频| 欧美剧在线免费观看网站| 久久久夜色精品亚洲| 亚洲一区影音先锋| 国产精品夜夜爽| 欧美揉bbbbb揉bbbbb| 亚洲国产高清不卡| 久久精品国产免费| 欧美性感一类影片在线播放| 337p日本欧洲亚洲大胆精品| 亚洲va国产天堂va久久en| 成人免费高清在线观看| 欧美男男青年gay1069videost| 国产欧美一区二区精品性色| 丝袜亚洲另类欧美综合| 99久久99久久精品免费看蜜桃| 日韩视频免费观看高清完整版在线观看 | 欧美国产1区2区| 天天免费综合色| 91丝袜国产在线播放| 久久久一区二区三区捆绑**| 香蕉久久夜色精品国产使用方法| 成人黄色av网站在线| 欧美一级一区二区| 亚洲大片免费看| 97久久精品人人爽人人爽蜜臀| 精品人在线二区三区| 亚洲午夜一区二区| 一本一道久久a久久精品| 国产日韩av一区| 久久爱www久久做| 91精品国产一区二区三区| 亚洲蜜臀av乱码久久精品| av一区二区三区| 国产欧美一区二区精品性色 | 午夜欧美2019年伦理| 91网站在线播放| 亚洲日本免费电影| 91网站视频在线观看| 国产精品乱码一区二三区小蝌蚪| 精品午夜一区二区三区在线观看| 欧美人妇做爰xxxⅹ性高电影 | 久久久另类综合| 国产精品资源网| 久久精品视频一区二区三区| 国内精品视频666| 欧美精品一区男女天堂| 久久福利资源站| 精品国产乱码久久久久久久| 美女高潮久久久| 日韩视频免费观看高清完整版在线观看| 亚洲一二三四在线观看| 在线观看欧美黄色| 午夜伊人狠狠久久| 日韩精品最新网址| 国产一区二区伦理| 国产精品久久毛片| 91亚洲大成网污www| 亚洲乱码国产乱码精品精98午夜| 在线免费观看日本欧美| 亚洲国产乱码最新视频| 欧美精品一级二级三级| 老司机精品视频导航| 国产欧美一区二区在线| 色婷婷精品大视频在线蜜桃视频 | 国产欧美日韩一区二区三区在线观看| 激情六月婷婷久久| 国产精品久久久久久久第一福利| 91丨porny丨首页| 午夜精品福利在线| 久久午夜国产精品| 91黄视频在线观看| 麻豆精品在线观看| 亚洲国产精品99久久久久久久久| 在线一区二区视频| 久久精品国产99久久6| 国产精品精品国产色婷婷| 在线观看日韩高清av| 精品亚洲国产成人av制服丝袜| 国产精品亲子乱子伦xxxx裸| 欧美视频精品在线观看| 狠狠色丁香久久婷婷综合丁香| 国产精品青草久久| 日韩一区二区在线观看视频播放| 国产一区二区在线电影| 亚洲女厕所小便bbb| 日韩一区二区精品在线观看| youjizz国产精品| 日本麻豆一区二区三区视频| 中文子幕无线码一区tr| 在线播放91灌醉迷j高跟美女| 国产激情一区二区三区| 亚洲国产精品影院| 中文字幕在线不卡视频| 日韩午夜精品电影| 91激情五月电影| 成人免费看的视频| 国产一区二区0| 亚洲va天堂va国产va久| 椎名由奈av一区二区三区| 91麻豆精品91久久久久同性| aaa亚洲精品| 精品中文av资源站在线观看| 亚洲精品中文在线| 国产精品欧美一级免费| 日韩欧美三级在线| 欧美午夜精品理论片a级按摩| 丰满白嫩尤物一区二区| 麻豆精品在线播放| 日本不卡一二三| 亚洲一区成人在线| 亚洲精品自拍动漫在线| 成人免费小视频| 久久久久国产一区二区三区四区| 欧美三区在线观看| 97se亚洲国产综合在线| 久热成人在线视频| 亚洲成人av中文| 亚洲午夜一区二区| 亚洲午夜在线电影| 亚洲一区二区三区中文字幕| 亚洲欧洲国产日韩| 国产精品福利一区二区| 国产欧美视频一区二区三区| 精品欧美乱码久久久久久| 欧美一区二区视频在线观看2022| 欧美日韩精品一区二区在线播放| 欧美系列一区二区| 欧美日韩在线播放三区| 精品视频一区三区九区| 欧美日韩一本到| 欧美日韩一区 二区 三区 久久精品| 色婷婷久久久亚洲一区二区三区 | 国产麻豆精品theporn| 免费亚洲电影在线| 奇米在线7777在线精品| 久久机这里只有精品| 狠狠色丁香婷婷综合久久片| 精品一区二区三区欧美| 国产一区二区精品久久| 丁香六月综合激情| 91同城在线观看| 欧美系列日韩一区| 日韩精品中文字幕在线不卡尤物| 欧美大胆人体bbbb| 国产欧美一区二区在线观看| 亚洲色欲色欲www| 天堂成人免费av电影一区| 日本va欧美va瓶| 国产高清不卡一区| 一本大道久久a久久综合婷婷| 欧美日韩综合不卡| 欧美成人一区二区三区| 国产精品久久久久aaaa樱花| 一区二区三区欧美视频| 天天色综合天天| 成人午夜av电影| 欧美色综合天天久久综合精品| 欧美一级在线免费| 中文字幕一区视频|