CSDN博客

img PercyLee

路由模拟——路由算法2的实现

发表于2004/5/7 15:53:00  1641人阅读

 

/*

算法说明:本实现的算法为Floyed算法,矩阵matrix(局部变量)存储源结点到其它结点的

          最短路径,而result则存储返回结果——路由表。

 

参数说明:

         _netArray: routNum * routNum的矩阵,网络的拓扑信息

          _valArray: routNum * routNum的矩阵,网络的耗散信息

          result   : routNum * 2的矩阵,路由表-返回

          routNum  : 路由器数量

          index    : 源路由器号

*/

void __declspec(dllexport) ComputeMethods(int **_netArray,int **_valArray

                                                 ,int **&result,int routNum,int index)

{

     //

         int **matrix =0;

         bool bVal = true;

 

         matrix = new int*[routNum];

          for(int i=0;i<routNum;i++)

              matrix[i] = new int[routNum];

 

          for(int i=0;i<routNum;i++)

              for(int j=0;j<routNum;j++)

                  matrix[i][j] = _valArray[i][j];

        

          for(int i=0;i<routNum;i++){

              result[i][0]=-1;

              result[i][1]=-1;

         }

 

          while(true)

         {

              for(int k=0;k<routNum;k++)

                   for(int i=0;i<routNum;i++)

                        for(int j=0;j<routNum;j++)

                       {

                                 if(    matrix[i][j] >=(matrix[i][k] + matrix[k][j]))

                                 {

                                     matrix[i][j] = matrix[i][k] + matrix[k][j];

                                      if(i==index && _netArray[i][k]==1)

                                     {

                                          if(i!=k || k==j){

                                              result[j][0] = j;

                                              result[j][1] = k;

                                          }

                                     }

                                 }//end of if

                       }//end of for

              for(int i=0;i<routNum;i++)

                   bVal = bVal &&(result[i][0]!=-1) && (result[i][1]!=-1);

 

              if(bVal)

                   break;

              else

                   bVal =true;

         }//end of while

 

         delete []matrix;

}

 

0 0

相关博文

我的热门文章

img
取 消
img