VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
路由模拟——路由算法2的实现

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

/*

算法说明:本实现的算法为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;

}

 




相关文章

相关软件