⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 routealgo.cc

📁 本程序是一些路由算法的源代码
💻 CC
字号:
/* * Copyright (c) 2000 University of Southern California. * All rights reserved.                                             *                                                                 * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, advertising * materials, and other materials related to such distribution and use * acknowledge that the software was developed by the University of * Southern California, Information Sciences Institute.  The name of the * University may not be used to endorse or promote products derived from * this software without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * * Generic helpers (all routing algorithms) * contributed to ns * George Riley, Georgia Tech, Winter 2000 */#include "config.h"#ifdef HAVE_STL#include <stdio.h>#include "routealgo/rnode.h"// Forward declarationsstatic void PrintPred(nodeid_t, nodeid_t, RoutingVec_t&);static void NixPred(nodeid_t, nodeid_t, RoutingVec_t&, RNodeVec_t&, NixVec&);// Globally visible routinesvoid PrintRoute( nodeid_t s, nodeid_t d, RoutingVec_t& pred){ // Print the route, given source s, destination d and predecessor vector pred  printf("Route to node %ld is : ", d);  PrintPred(s, d, pred);  printf("\n");}// Create the NixVectorvoid NixRoute( nodeid_t s, nodeid_t d, RoutingVec_t& pred,               RNodeVec_t& nodes, NixVec& nv){  NixPred(s, d, pred, nodes, nv);}// Print the parent list (debug)void PrintParents(RoutingVec_t& pred){  printf("Parent vector is");  for (RoutingVec_it i = pred.begin(); i != pred.end(); i++)    {      printf(" %ld", *i);    }  printf("\n");}// Print the route from the nixvector (debug)void PrintNix(nodeid_t s, RNodeVec_t nodes, NixVec& nv){  printf("Printing Nv from %ld\n", s);  while(1)    {      printf("%ld\n", s);      fflush(stdout);      if (!nodes[s])        {          printf("PrintNix Error, no node for %ld\n", s);          break;        }      printf("Node %ld nixl %ld\n", s, nodes[s]->GetNixl());      Nix_t n = nv.Extract(nodes[s]->GetNixl());      if (n == NIX_NONE) break; // Done      nodeid_t s1 = nodes[s]->GetNeighbor(n);      if (s1 == NODE_NONE)        {          printf("Huh?  Node %ld can't get neighbor %ld\n", s, n);          break;        }      s = s1;    }  printf("\n");  nv.Reset();}// helpersstatic void PrintPred(nodeid_t s, nodeid_t p, RoutingVec_t& pred){  if (s == p)    {      printf(" %ld", s);    }  else    {      if (pred[p] == NODE_NONE)        {          printf(" No path..");        }      else        {          PrintPred(s, pred[p], pred);          printf(" %ld", p);        }    }}static void NixPred(nodeid_t s, nodeid_t p, RoutingVec_t& pred,                    RNodeVec_t& nodes, NixVec& nv){  if (s == p)    {      return; // Got there    }  else    {      if (pred[p] == NODE_NONE)        {          if(0)printf(" No path..");          return;        }      else        {          NixPred(s, pred[p], pred, nodes, nv);          NixPair_t n = nodes[pred[p]]->GetNix(p);          if (n.first == NIX_NONE)            { // ! Error.              printf("RouteAlgo::GetNix returned NIX_NONE!\n");              exit(1);            }          if(0)printf("NVAdding ind %ld lth %ld\n", n.first, n.second);          nv.Add(n);        }    }}#endif /* STL */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -