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

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

?? routcao.c

?? 一個linux下的各種組播路由算法編程
?? C
?? 第 1 頁 / 共 2 頁
字號:

class edge {

 public:
  edge(int srce, int snk, double c, double d, int h) {
    source =srce; sink = snk; cost =c; key = d; hops = h; next = NULL;
  };
  ~edge() {};
  double cost;
  double key;
  int source;
  int sink;
  int hops;
  edge *next;
};

class edgeQueue {

 public:
  edge *head;
  edge *tail;
  edgeQueue() { head = tail = NULL; };
  ~edgeQueue();
  void insert(edge *e);
  edge *dequeue();
};

void edgeQueue::insert(edge *e) {
   short stop = 0;
   edge *dum;
   e->next = head;
   if (head == NULL)
      head = tail = e;
   else if (head->key > e->key) head = e;
   else while(!stop) {
      dum = e->next;
      e->next = e->next->next;
      if (e->next == NULL) {
         tail->next = e;
         tail = e;
         stop = 1;
      }      
      else if (e->next->key > e->key) {
         dum->next = e;
         stop = 1;
      };
   };
};

edge *edgeQueue::dequeue() {
  edge *e;
  if (head != NULL) {
    e = head;
    head = head->next;
    return(e);
  }
  else return(NULL);
};

edgeQueue::~edgeQueue() {
  edge *e;
  while (head != NULL) {
    e = head;
    head = head->next;
    delete e;
  };
};

class path {

 public:
  path(int *p, int pp, double c, double d);
  ~path() { delete [] pred; };
  int *pred; //This is different than the original algorithm. I will
             //save the entire path not just one predecessor.
  double cost;
  double key;
  path *next;
};

path::path(int *p, int pp, double c, double d) {
  cost = c;
  key = d;
  int i = 0;
  while (*(p + i) != INT_MAX) i++;
  pred = new int[i+2];
  i = 0;
  while (*(p + i) != INT_MAX) {
    *(pred + i) = *(p + i);
    i++;
  };
  *(pred + i) = pp;
  *(pred + i + 1) = INT_MAX;
};

class pathList {

 public:
  pathList(int num);
  ~pathList();
  int dim;
  path **pl;
  path *list(int i) { return(*(pl + i)); };
  void removeHead(int i);
  void prepend(int i, path *p);
};

pathList::pathList(int num) {
  pl = new path*[num];
  int i;
  dim = num;
  for (i = 0; i < num; i++) *(pl + i) = NULL;
};

pathList::~pathList() {
  int i;
  for (i = 0; i < dim; i++) {
    path *tmp1, *tmp2;
    tmp1 = *(pl + i);
    while (tmp1 != NULL) {
      tmp2 = tmp1;
      tmp1 = tmp1->next;
      delete tmp2;
    };
  };
  delete [] pl;
};

void pathList::removeHead(int i) {
  path *p = *(pl + i);
  *(pl + i) = p->next;
  delete p;
};

void pathList::prepend(int i, path *p) {
  p->next = *(pl + i);
  *(pl + i) = p;
};

pathList *TheNodeList::CBF(int source, double *c_matrix, double *d_matrix) {

  pathList *pl = new pathList(num);
  edgeQueue *eq = new edgeQueue;
  double cummDelay = 0;
  edge *e, *ee;
  
  int i;
  for (i = 0; i < num; i++) {
    if (*(d_matrix + (source * num) + i) < DELAYBOUND) {
      e = new edge(source, i, *(c_matrix + (source * num) + i), 
			 *(d_matrix + (source * num) + i), 0);
      eq->insert(e);
    };
  };

  while ((cummDelay < DELAYBOUND) && (eq->head != NULL)) {
    e = eq->dequeue();
    if (relaxed(pl, e, c_matrix, source) == True) {
      for (i = 0; i < num; i++) {
	if (*(d_matrix + (e->sink * num) + i) < DELAYBOUND) {
	  switch (obj) {
	  case PLAIN:
	    ee = new edge(e->sink, i, 
			  e->cost + *(c_matrix + (e->sink * num) + i), 
			  e->key + *(d_matrix + (e->sink * num) + i),
			  e->hops + 1);
	    break;
	  case MULT:
	    ee = new edge(e->sink, i, 
			  e->cost + 
			  *(c_matrix + (e->sink * num) + i) * (e->hops + 1), 
			  e->key + *(d_matrix + (e->sink * num) + i),
			  e->hops + 1);
	    break;
	  case ADD:
	    ee = new edge(e->sink, i, 
			  e->cost + *(c_matrix + (e->sink * num) + i) +
			  e->hops * ALPHA, 
			  e->key + *(d_matrix + (e->sink * num) + i),
			  e->hops + 1);
	    break;
	  };
	  eq->insert(ee);
	};
      };
    };
    cummDelay = e->key;
    delete e;
  };
  delete eq;
  return(pl);
};

int TheNodeList::relaxed(pathList *pl, edge *e, double *c_matrix, int srce) {
  path *currPath = pl->list(e->sink);
  path *p;
  if (currPath != NULL) {
    if (currPath->cost <= e->cost) {
      return(False);
    }
    else if (currPath->key == e->key) pl->removeHead(e->sink);
  };
  if (e->source != srce) {
    path *prevPath = pl->list(e->source);
//The following is used temporarily unitl I understand floating point precision
    while ((prevPath->cost < (e->cost - *(c_matrix +(e->source * num)+e->sink)
			      - 1)) &&   //-1 for floating point precision
	    (prevPath->next != NULL)) {
      prevPath = prevPath->next;
    };
    p = new path(prevPath->pred, e->source, e->cost, e->key);
  }
  else {
    int *tmpi;
    tmpi = new int;
    *tmpi = INT_MAX;
    p = new path(tmpi, srce, e->cost, e->key);
    delete tmpi;
  };
  pl->prepend(e->sink, p);
  return(True);
};

double TheNodeList::routerCAO(Node *source, int addr, double &d, double &maxd,
			      double &mind, double &h, double &nodes) {
  
   //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();
   int srce = source->name();

   //Locate the MC group that contains the destination set
   MCGroup *group = groupsHd;
   while ((group !=  NULL) && (group->address() != addr))   
     group = group->next();
   
   if (group != NULL)  {

     //if the source is the only member in the group
     if ((group->count() == 1) && (group->headm()->nodePtr() == source)) {
       source->addRoutingEntry(addr, source);
       h = d = maxd = mind = 0;
       nodes = 1;
       return(0);
     };

     int gCount = group->count();
     int i, j, k;
     double *c_matrix, *d_matrix;
     c_matrix = new double[num*num];
     d_matrix = new double[num*num];
     for (i = 0; i < num; i++) {
       for (j = 0; j < num; j++) {
	 *(c_matrix + (i * num) + j) = DBL_MAX;
	 *(d_matrix + (i * num) + j) = DBL_MAX;
       };
     };
     
     /*The c_matrix contains link costs
       and the d_matrix contains link delays*/
     NodeListEntry *tmp = nodeListHd;
     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*/
	   *(c_matrix + (i * num) + j) = adj->peak();
	   *(d_matrix + (i * num) + j) = adj->delay();
	 }
	 else 
	 if ((fn == AVERAGE) && (adj->average() <= ((adj->linkCapacity() 
						     * ADMITRATIO) - avg))) {
 	                                            /*in order to eliminate
						      links saturated links*/
	     *(c_matrix + (i * num) + j) = adj->average();
	     *(d_matrix + (i * num) + j) = adj->delay();
	 };
	 adj = adj->next();
       };
       tmp = tmp->next();
     };	

     int srceMember = False;
     tmp = group->headm();
     while ((tmp != NULL) && (tmp->nodePtr() != source)) tmp = tmp->next();
     if (tmp != NULL) srceMember = True;

     pathList *pl;
     path *p1, *pBest;
     int best;
     int *member;
     member = new int[gCount];
     path **mPath;
     mPath = new path*[gCount];
     for (i = 0; i < gCount; i++) {
       *(member + i) = INT_MAX;
       *(mPath + i) = NULL;
     };
     int done = False;
     k = 0;
     while (done == False) {
       pl = CBF(srce, c_matrix, d_matrix);
       pBest = NULL;
       tmp = group->headm();
       while (tmp != NULL) {
	 if (tmp->nodePtr()->name() != srce) {
	   i = 0;
	   while ((i < k) && 
		  (*(member + i) != tmp->nodePtr()->name())) i++;
	   if (i == k) {
	     p1 = pl->list(tmp->nodePtr()->name()); 
	     while ((p1 != NULL) && (p1->key >= DELAYBOUND)) {
	       p1 = p1->next;
	     };
	     if (p1 != NULL) {
	       if (pBest == NULL) {
		 pBest = p1;
		 best = tmp->nodePtr()->name();
	       }
	       else if ((p1->cost < pBest->cost) ||
		       ((p1->cost == pBest->cost) && (p1->key < pBest->key))) {
		 pBest = p1;
		 best =  tmp->nodePtr()->name();
	       };
	     };
	   };
	 };
	 tmp = tmp->next();
       };

       if (pBest == NULL) {
	 delete [] member;
	 delete pl;
	 delete [] c_matrix;
	 delete [] d_matrix;
	 for (i = 0; i < gCount; i++) delete (*(mPath + i));
	 delete [] mPath;
	 return(SATORDB);
       }
       else {
	 *(member + k) = best;
	 p1 = new path(pBest->pred, best, pBest->cost, pBest->key);
	 *(mPath + k) = p1;
	 int from, to;
	 i = 1;
	 int *prev = p1->pred;
	 from = *prev;
	 to = *(prev + 1);
	 while (to != INT_MAX) {
	   *(c_matrix + (from * num) + to) = 0;
	   i++;
	   from = to;
	   to = *(prev + i);
	 };
       };
       delete pl;

       k++;
       if ((k == (group->count() - 1)) && (srceMember == True)) done = True;
       else if (k == group->count()) done = True;      
     };
     delete [] c_matrix;

     //The merge algorithm

     //First determine the number of paths traversing each node
     int *occur, *encountered, *pth;
     occur = new int[num];
     encountered = new int[num];
     for  (i = 0; i < num; i++) {
       *(occur + i) = 0;
       *(encountered + i) = 0;
     };
     for (i = 0; i < gCount; i++) {
       if (*(member + i) != INT_MAX) {
	 pth = (*(mPath + i))->pred;
	 j = 0;
	 while (*(pth + j) != INT_MAX) {
	   *(occur + *(pth + j)) += 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精品自在自线| 日韩小视频在线观看专区| 亚洲成人一二三| 久久久精品蜜桃| 欧美精品黑人性xxxx| 成人免费高清在线观看| 日日夜夜精品视频免费| 亚洲色图20p| 久久精品一级爱片| 欧美一级xxx| 在线亚洲高清视频| 不卡一区二区中文字幕| 激情五月婷婷综合| 同产精品九九九| 一区二区三区日韩在线观看| 日本一区二区电影| 久久婷婷国产综合国色天香| 555www色欧美视频| 欧美色电影在线| 91小视频在线免费看| 国产成人在线视频免费播放| 奇米色777欧美一区二区| 亚洲一区二区影院| 亚洲人成网站影音先锋播放| 国产拍揄自揄精品视频麻豆| 精品理论电影在线观看| 91麻豆精品国产91久久久久| 在线欧美日韩精品| 91麻豆国产福利精品| 91在线国产观看| av在线不卡免费看| 成人福利在线看| 大白屁股一区二区视频| 国产精品亚洲专一区二区三区| 久久97超碰色| 精品亚洲免费视频| 狠狠v欧美v日韩v亚洲ⅴ| 精品一区二区三区免费毛片爱| 奇米一区二区三区| 久久99国产精品免费网站| 另类小说色综合网站| 久久99蜜桃精品| 国产一区二区0| 国产成人精品免费在线| 国产高清成人在线| 成人精品在线视频观看| 99久久综合国产精品| av一本久道久久综合久久鬼色| 99精品视频在线观看| 在线观看一区二区视频| 欧美日韩二区三区| 91精品国产综合久久精品 | 91麻豆精品国产91| 日韩一区二区三区在线| 精品少妇一区二区三区日产乱码| 日韩网站在线看片你懂的| 久久在线免费观看| 国产精品色婷婷| 亚洲精品成人精品456| 午夜视频一区在线观看| 久久丁香综合五月国产三级网站| 国产揄拍国内精品对白| 成人av电影在线| 欧美日韩在线综合| 精品女同一区二区| 国产精品久久久久永久免费观看| 亚洲免费观看高清| 日本欧美大码aⅴ在线播放| 美女性感视频久久| 成人看片黄a免费看在线| 欧美综合在线视频| 久久久久久久久久久黄色| 成人免费小视频| 免费日韩伦理电影| 不卡视频一二三四| 7777精品伊人久久久大香线蕉的| 欧美va天堂va视频va在线| ...xxx性欧美| 日韩成人免费在线| 白白色亚洲国产精品| 欧美顶级少妇做爰| 欧美国产日韩亚洲一区| 午夜精品福利在线| 成人av电影免费在线播放| 欧美精品在线观看播放| 国产精品日韩成人| 日本一不卡视频| 91在线码无精品| 2024国产精品| 一区二区久久久久| 国产高清不卡二三区| 7777精品伊人久久久大香线蕉 | 亚洲一区二区三区影院| 韩国毛片一区二区三区| 在线观看亚洲专区| 国产精品婷婷午夜在线观看| 五月综合激情婷婷六月色窝| k8久久久一区二区三区 | 成人爽a毛片一区二区免费| 在线观看亚洲专区| 中文字幕巨乱亚洲| 精品在线免费观看| 欧美三级日韩三级国产三级| 国产精品天美传媒| 久久国产尿小便嘘嘘| 欧美丝袜丝交足nylons图片| 国产清纯在线一区二区www| 奇米影视在线99精品| 欧美系列亚洲系列| 亚洲欧美一区二区三区极速播放 | 精品动漫一区二区三区在线观看| 亚洲一区二区三区激情| a级高清视频欧美日韩| 国产性色一区二区| 久久99国产精品免费| 欧美日韩午夜影院| 亚洲美女视频在线| av亚洲产国偷v产偷v自拍| 精品99一区二区| 日本不卡一二三| 欧美丰满少妇xxxxx高潮对白 | 午夜精品成人在线视频| 在线观看亚洲专区| 亚洲精品视频在线观看网站| 91影视在线播放| 亚洲欧洲日韩一区二区三区| 国产a区久久久| 国产日韩v精品一区二区| 久国产精品韩国三级视频| 欧美一级一区二区| 蜜桃在线一区二区三区| 欧美一区二区在线看| 日本在线不卡视频一二三区| 欧美精品三级在线观看| 五月天激情综合| 欧美一二三区在线| 毛片av一区二区| 精品美女一区二区三区| 九九国产精品视频| 精品久久久久久久人人人人传媒| 黄色日韩三级电影| 久久影院午夜论| 国产精品主播直播| 国产精品卡一卡二卡三| 不卡影院免费观看| 亚洲精品日产精品乱码不卡| 欧美视频三区在线播放| 午夜日韩在线电影| 精品国产免费久久| 成人精品小蝌蚪| 一区二区三区在线视频播放| 欧美日韩高清不卡| 精品一区二区三区免费毛片爱| 2020国产精品久久精品美国| 国产大陆亚洲精品国产| 中文字幕一区二区三区不卡在线| 91美女福利视频| 午夜久久久影院| 欧美精品一区二区三| 99国产精品久久久久久久久久久| 亚洲午夜私人影院| 精品国产乱码久久久久久图片| 国产成人精品在线看| 一区二区三区影院| 欧美一区二区三区四区久久| 国产在线不卡一卡二卡三卡四卡| 国产精品情趣视频| 欧美亚一区二区| 久久国产欧美日韩精品| 综合久久综合久久| 69成人精品免费视频| 国产一区二区伦理| 亚洲免费三区一区二区| 91精品国产色综合久久不卡蜜臀| 国产成人精品一区二区三区四区| 亚洲视频一二三| 日韩精品一区二区三区四区视频| 成人教育av在线| 日韩黄色片在线观看| 国产亚洲精品久| 欧美日韩精品是欧美日韩精品| 国产剧情在线观看一区二区| 亚洲免费伊人电影| 久久久天堂av| 欧美专区亚洲专区| 国产精品资源站在线| 亚洲电影一级黄| 国产精品伦理在线| 日韩一级精品视频在线观看| 成人av影院在线| 麻豆精品一区二区| 一级特黄大欧美久久久| 国产亚洲视频系列| 51精品秘密在线观看| 9久草视频在线视频精品| 日本不卡中文字幕| 亚洲精品国产无天堂网2021| 国产不卡视频一区二区三区| 日本欧美肥老太交大片| 亚洲精品国产a|