实现路由模拟算法的方法
实现路由模拟算法的方法
/*
算法说明:本实现的算法为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;
}