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

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

?? routbsma.c

?? 一個linux下的各種組播路由算法編程
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }
    else c += tmpc;
    BSMAInfo(source, addr, tmp->nodePtr(), delay, cost, hops, via,
	     d_matrix, c_matrix, seCount, from, to, seCost, c, group);
    tmp = tmp->next();
    if (tmp != NULL) seCount++;
  };         
};  

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


  double pk, avg;
  //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();
  };
  pk = ss->source()->peak();
  avg = ss->source()->average();

  int i, j, k;
  double *d_matrix = new double[num*num];
  double *c_matrix = new double[num*num];
  NodeListEntry *tmp = nodeListHd;

  /*initialize the matrices*/
  for (i = 0; i < num; i++) {
    for (j = 0; j < num; j++) {
      (*(d_matrix + (i * num) + j)) = DBL_MAX;
      (*(c_matrix + (i * num) + j)) = DBL_MAX;
    };
  };

  while (tmp != NULL) {
    i = tmp->nodePtr()->name();
    AdjacencyListEntry *adj = tmp->nodePtr()->adjacentNodes();
    while (adj != NULL) {
      j = adj->nodePtr()->name();
      if ((fn == PEAK) && (adj->peak() <= 
			   ((adj->linkCapacity() * ADMITRATIO) - pk))) { 
	  /*in order to eliminate saturated links*/
	if (adj->delay() < DELAYBOUND) {
	  *(d_matrix + (i * num) + j) = adj->delay();
	  *(c_matrix + (i * num) + j) = adj->peak();
	};
      }
      else if ((fn == AVERAGE) && (adj->average() <= 
			      ((adj->linkCapacity() * ADMITRATIO) - avg))) {
	/*in order to eliminate saturated links*/
	if (adj->delay() < DELAYBOUND) {
	  (*(d_matrix + (i * num) + j)) = adj->delay();
	  (*(c_matrix + (i * num) + j)) = adj->average();
	};
      };
      adj = adj->next();
    };
    tmp = tmp->next();
  };

  MCGroup *group;
  NodeListEntry *tree = NULL;
  double status = leastDelay(source, addr, &group, &tree, pk, avg);
  if (status == GOOD) {
    if ((group->count() == 1) && 
	(group->headm()->nodePtr()->name() == source->name())) {
      source->addRoutingEntry(addr, source);
      h = d = maxd = mind = 0;
      nodes = 1;
      delete [] d_matrix;
      delete [] c_matrix;
      return(0);
    };
    double *cost = new double[num+1];
    double *delay = new double[num+1];
    int *hops = new int[num+1];
    int *via = new int[num+1];

    int all = False;
    int unMarkAll = True;
    int *from, *to, *mark;
    from = new int[num+1];
    to = new int[num+1];
    mark = new int[num+1];
    *from = INT_MAX;
    double *seCost = new double[num+1];
    int seCount;

    while (all == False) {
      //Repeat until all edges are marked
      
     //scan tree to determine the superedges, and put superedges 
     //in an array
     if (unMarkAll == True) {
       for (i = 0; i <= num; i++) {
	 *(from + i) = INT_MAX;
	 *(to + i) = INT_MAX;
	 *(mark + i) = False;
	 *(seCost + i) = DBL_MAX;
	 *(delay + i) = DBL_MAX;
	 *(cost + i) = DBL_MAX;
	 *(hops + i) = INT_MAX;
	 *(via + i) = INT_MAX;
       };
       unMarkAll = False;
       double c = 0;
       seCount = 0;
       *(delay + source->name()) = 0;
       *(cost + source->name()) = 0;
       *(hops + source->name()) = 0;
       BSMAInfo(source, addr, source, delay, cost, hops, via,
		d_matrix, c_matrix, seCount, from, to, seCost, c, group);
       i = 0;
       while ((all == False) && (i < num)) {
	 if (((*(via + i)) != INT_MAX) && (*(delay + i) > DELAYBOUND))
	   all = True;
	 i++;
       };
     };
           
     //find the most expensive unmarked superedge
     int choose = INT_MAX;
     double c = -1;
     for (i = 0; i < num; i++) {
       if ((*(mark + i) == False) && (*(from + i) != INT_MAX) &&
	   (*(seCost + i) > c)) {
         c = *(seCost + i);
	 choose = i;
       };
     };
   
     //divide the tree into subtrees tree1 and tree2
     int srce = *(from + choose);
     int dest = *(to + choose);
     double cBound = *(seCost + choose);
     double delta1 = *(delay + dest);

     int *tree2 = new int[num];
     *tree2 = dest;
     j = 1;
     for (i = 0; i < num; i++) {
       k = i;
       found = False;
       while ((*(via + k) != INT_MAX) && (found == False)) {
	 if (*(via + k) == dest) found =True;
	 else k = *(via + k);
       };
       if (found == True) {
	 *(tree2 + j) = i;
	 j++;
       };
     };
     *(tree2 + j) = INT_MAX;

     int *tree1 = new int[num];
     j = 0;
     for (i = 0; i < num; i++) {
       if (*(cost + i) < DBL_MAX) {
	 k = 0;
	 while ((*(tree2 + k) != i) && (*(tree2 + k) != INT_MAX)) k++;
	 if (*(tree2 + k) == INT_MAX) {
	   k = *(via + dest);
	   while ((i != k) && (srce != k)) k = *(via + k);
	   if (k == srce) {
	     *(tree1 + j) = i;
	     j++;
	   };
	 };
       };
     };
     *(tree1 + j) = INT_MAX;

     //determine the max. delay in tree2
     double delta2 = 0;
     k = 0;
     while (*(tree2 + k) != INT_MAX) {
       if (*(delay + *(tree2 + k)) > delta2)
	 delta2 = *(delay + *(tree2 + k));
       k++;
     };

     //for each edge in tree1 find the constrained cheapest path to the root
     // of tree2. Such a path is not permitted to include any  nodes of either
     // tree1 or tree2.

     k = 0;
     kthPath *best = NULL;
     kthPath *tmp;
     while (*(tree1 + k) != INT_MAX) {
       tmp = kthShortest(*(tree1 + k), dest, 
		  DELAYBOUND - (delta2 - delta1) - *(delay + *(tree1 + k)), 
		  cBound, tree1, tree2, 
		  c_matrix, d_matrix, *(hops + *(tree1 + k)));
       if (tmp != NULL) {
	 if (best != NULL) {
	   if (tmp->cost < best->cost) {
	     delete best;
	     best = tmp;
	   }
	   else delete tmp; 
	 }
	 else best = tmp;
       };
       k++;
     }; 
     delete [] tree1;
     delete [] tree2;

      //If the cheapest path is cheaper than the superedge cost replace the 
      //superedge and unmark all edges, else mark the superedge and go back to
      if (best == NULL) *(mark + choose) = True;
      else {
	unMarkAll = True;
	//erase the previous superedge
        int via1, dest1;
	double av, pe;
	AdjacencyListEntry *adj;
	via1 = *(via + dest);
	dest1 = dest;
	Node *destNd = nodeOf(dest1);
	Node *viaNd = nodeOf(via1);
	viaNd->removeChild(addr, source, destNd);
	if (via1 != srce) viaNd->removeRoutingEntry(addr, source);
	adj = viaNd->adjacentNodes();
	while (adj->nodePtr() != destNd) adj = adj->next();
        pe = adj->peak() - pk; 
	adj->peak(pe);
        av = adj->average() - avg;
	adj->average(av);
	NodeListEntry *tr = tree;
	NodeListEntry *prtr = NULL;
	while (tr->nodePtr() != destNd) {
	  prtr = tr;
	  tr = tr->next();
	};
	if (tr == tree) tree = tr->next();
	else prtr->next(tr->next());
	delete tr;
	while (via1 != srce) {
	  dest1 = via1;
	  via1 = *(via + via1);
	  destNd = nodeOf(dest1);
	  viaNd = nodeOf(via1);
	  viaNd->removeChild(addr, source, destNd);
	  if (via1 != srce) viaNd->removeRoutingEntry(addr, source);
	  adj = viaNd->adjacentNodes();
	  while (adj->nodePtr() != destNd) adj = adj->next();
	  pe = adj->peak() - pk; 
	  adj->peak(pe);
	  av = adj->average() - avg;
	  adj->average(av);
	  tr = tree;
	  prtr = NULL;
	  while (tr->nodePtr() != destNd) {
	    prtr = tr;
	    tr = tr->next();
	  };
	  if (tr == tree) tree = tr->next();
	  else prtr->next(tr->next());
	  delete tr;
	};

	//Add the new superedge
	int *p = best->pth;
	via1 = *p;
	dest1 = *(p + 1);
	viaNd = nodeOf(via1);
	destNd = nodeOf(dest1);
	viaNd->addChild(addr, source, destNd);
	adj = viaNd->adjacentNodes();
	while (adj->nodePtr() != destNd) adj = adj->next();
        pe = adj->peak() + pk; 
	adj->peak(pe);
        av = adj->average() + avg;
	adj->average(av);
	tr = new NodeListEntry;
	tr->nodePtr(destNd);
	tr->next(tree);
	tree = tr;
	i = 2;
	while (dest1 != dest) {
	  via1 = dest1;
	  dest1 = *(p + i);
	  viaNd = nodeOf(via1);
	  destNd = nodeOf(dest1);
	  viaNd->addChild(addr, source, destNd);
	  adj = viaNd->adjacentNodes();
	  while (adj->nodePtr() != destNd) adj = adj->next();
	  pe = adj->peak() + pk; 
	  adj->peak(pe);
	  av = adj->average() + avg;
	  adj->average(av);
	  tr = new NodeListEntry;
	  tr->nodePtr(destNd);
	  tr->next(tree);
	  tree = tr;
	  i++;
	};
	delete best;
      };
      
      //Now check if all edges are marked
      if (unMarkAll == False) {
	i = 0;
	while ((*(from + i) != INT_MAX) && (*(mark + i) == True)) i++;
	if (*(from + i) == INT_MAX) all = True;
      };
    };
    delete [] cost;
    delete [] hops;
    delete [] delay;
    delete [] via;
    delete [] c_matrix;
    delete [] d_matrix;
    delete [] from;
    delete [] to;
    delete [] mark;
    delete [] seCost;

    int dbViolation = False;
    maxd = 0;
    mind = DBL_MAX;
    //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;
    
    double totalCost = 0;
    nodes = 0;
    //Calculate the total cost of the tree and delete the temp. tree
    NodeListEntry *tmp1 = tree;
    while (tmp1 != NULL) {
      nodes++;
      RoutingTableEntry *rout = tmp1->nodePtr()->routingTable();
      int found = False;
      while ((rout != NULL) && (found == False)) {
	if ((rout->address() == addr) && (rout->source() == source)) 
	  found = True;
	else rout = rout->next();
      };
      NodeListEntry *tmp = rout->children();
      while (tmp != NULL) {
	AdjacencyListEntry *adj = tmp1->nodePtr()->adjacentNodes();
	int found2 = False;
	while ((adj != NULL) && (found2 == False)) {
	  if (adj->nodePtr() == tmp->nodePtr()) found2 = True;
	  else adj = adj->next();
	};
	if (adj != NULL) {
	  if (fn == PEAK) totalCost += (adj->peak() - pk);
	  else totalCost += (adj->average() - avg);
	};
	tmp = tmp->next();
      };
      tmp2 = tmp1->next();
      delete tmp1;
      tmp1 = tmp2;
    };
    if ((DBV == True) && (dbViolation == True)) {
      removeTree(source, addr);
      return(DBVIOL);
    }
    else return(totalCost);
  }
  else {
    delete [] c_matrix;
    delete [] d_matrix;
    return(status);
  };
};

     



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片你懂的| 成人听书哪个软件好| 亚洲国产wwwccc36天堂| 亚洲日本韩国一区| 亚洲欧美日韩国产另类专区| 欧美国产综合一区二区| 久久久久久久综合| 久久蜜桃一区二区| 日本一区二区免费在线观看视频| 国产午夜精品一区二区三区嫩草| 26uuu亚洲婷婷狠狠天堂| 精品剧情在线观看| 精品国产a毛片| 精品国产免费人成电影在线观看四季| 精品久久一区二区| 久久久综合网站| 久久只精品国产| 欧美激情中文字幕一区二区| 国产精品久久影院| 蜜桃av一区二区| 免费成人小视频| 国产一区二区三区四区五区美女| 国产精品77777竹菊影视小说| 极品少妇一区二区| 国产成人av一区| 91视视频在线观看入口直接观看www| 99视频精品免费视频| 欧美图区在线视频| 日韩欧美中文字幕公布| 久久免费偷拍视频| 玉米视频成人免费看| 亚洲一区二区三区免费视频| 日本在线不卡视频| 精品一区二区国语对白| 国产成人亚洲综合a∨婷婷 | 国产福利91精品一区二区三区| 懂色av一区二区三区免费看| 91看片淫黄大片一级在线观看| 欧美亚洲国产一区二区三区va| 日韩一级大片在线观看| 国产精品久久久久四虎| 天堂成人免费av电影一区| 国内精品久久久久影院色| 99精品久久只有精品| 911精品国产一区二区在线| 久久精品欧美一区二区三区不卡| 亚洲美女区一区| 久久精品99国产国产精| 91蜜桃在线观看| 日韩欧美高清dvd碟片| 亚洲免费视频成人| 国产综合成人久久大片91| 91性感美女视频| 日韩欧美一级在线播放| 亚洲欧洲精品一区二区精品久久久 | 国产精品白丝在线| 蜜臀精品一区二区三区在线观看| 91丝袜美女网| xnxx国产精品| 亚洲一区二区三区中文字幕 | 91亚洲永久精品| 日韩视频免费直播| 亚洲综合丝袜美腿| 国产成人免费av在线| 在线成人av网站| 亚洲欧洲成人精品av97| 韩国女主播成人在线观看| 91黄色免费看| 亚洲国产精品成人综合色在线婷婷| 日韩成人一级片| 一本色道久久综合亚洲精品按摩| 精品乱码亚洲一区二区不卡| 亚洲午夜久久久久久久久久久| 国产精品66部| 国产精品久久久久久久浪潮网站| 麻豆国产精品777777在线| 欧美三级日韩在线| 中文字幕一区二区三区蜜月 | 51精品国自产在线| 亚洲狠狠丁香婷婷综合久久久| 成人黄色一级视频| 久久综合久色欧美综合狠狠| 日韩精品色哟哟| 欧美日韩一级片网站| 亚洲激情自拍偷拍| 91伊人久久大香线蕉| 欧美韩国日本不卡| 成人中文字幕在线| 国产视频一区二区三区在线观看| 久久国产精品99精品国产 | 久久精品一区二区三区不卡| 日本欧美加勒比视频| 欧美日韩亚洲国产综合| 一区二区三区中文字幕在线观看| 91色在线porny| **性色生活片久久毛片| 成人免费视频视频| 国产精品视频观看| 粉嫩高潮美女一区二区三区| 国产视频不卡一区| 成人久久视频在线观看| 国产女人18毛片水真多成人如厕| 国产精品香蕉一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产自产高清不卡| 国产亚洲成av人在线观看导航| 国产一区二区看久久| 久久久久综合网| 国产精品一区专区| 久久精品免费在线观看| 成人av网站大全| 国产精品二三区| 色吧成人激情小说| 亚洲一区二区在线免费看| 欧美日韩国产综合视频在线观看| 亚欧色一区w666天堂| 日韩欧美成人一区二区| 国产成人免费视频一区| 亚洲欧洲性图库| 欧美日韩精品一区二区在线播放 | gogogo免费视频观看亚洲一| 成人免费一区二区三区在线观看| 91视频一区二区| 婷婷成人综合网| 精品伦理精品一区| 成人黄页在线观看| 亚洲国产精品久久久久婷婷884 | 51精品秘密在线观看| 久久99精品国产.久久久久久| 久久免费看少妇高潮| 日韩精品一区二区三区视频播放| 韩国欧美一区二区| 中文字幕在线观看一区| 在线影视一区二区三区| 天堂va蜜桃一区二区三区漫画版| 欧美一区二区国产| 国产99久久久国产精品潘金| 亚洲色欲色欲www在线观看| 欧美日韩日本视频| 国产一区二区免费看| 亚洲乱码国产乱码精品精98午夜 | 中文字幕一区二区三区在线不卡| 欧美在线视频不卡| 韩国理伦片一区二区三区在线播放| 日本一区二区视频在线观看| 欧美日韩一级视频| 国产成人亚洲综合色影视| 亚洲综合免费观看高清完整版在线 | 亚洲私人影院在线观看| 色婷婷综合久久久中文一区二区 | 3751色影院一区二区三区| 国产乱码字幕精品高清av | 国产精品综合视频| 艳妇臀荡乳欲伦亚洲一区| 欧美变态口味重另类| 91豆麻精品91久久久久久| 国模无码大尺度一区二区三区| 亚洲男人天堂av| 精品日韩欧美在线| 欧洲国内综合视频| 国产一区二区在线看| 亚洲国产视频a| 国产精品乱码人人做人人爱| 这里只有精品免费| 91亚洲国产成人精品一区二三| 久久国产精品72免费观看| 一区二区三区日韩欧美| 久久久久久一级片| 欧美一区二区福利在线| 91久久精品一区二区二区| 国产精品中文字幕日韩精品 | 欧美曰成人黄网| 国产成人精品免费在线| 日韩电影免费在线看| 亚洲码国产岛国毛片在线| 国产亚洲欧美日韩在线一区| 欧美精品vⅰdeose4hd| 91麻豆6部合集magnet| 国产一区在线观看麻豆| 丝袜亚洲精品中文字幕一区| 亚洲九九爱视频| 国产精品三级av| 2019国产精品| 欧美成人vps| 欧美一区二区黄色| 欧美狂野另类xxxxoooo| 色老汉av一区二区三区| 成人黄色av电影| 国产一区二区三区观看| 免费视频最近日韩| 五月天久久比比资源色| 亚洲精品一二三四区| 国产精品黄色在线观看| 国产午夜精品久久| 久久伊人蜜桃av一区二区| 日韩欧美在线观看一区二区三区| 欧美日韩精品免费| 欧美日韩免费在线视频| 欧美性大战xxxxx久久久| 99久久精品免费看|