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

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/*

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航