实现路由模拟算法的方法

实现路由模拟算法的方法

 

/*

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

}