BellmanFord C++(模板)

  
    
/* ******************************************************************************
* Name: BellmanFord
* Description : Find the shortest path from the start point to all other points
* Parameter list: edge - adjacency matrix of the graph
* dist - array of the shortest distance from start point
* path - array of the shortest path
* order - the number of the vertex
* start - start point
* maxNum - max distance means there is no path
*******************************************************************************
*/

void BellmanFord( int * edge, int * dist, int * path, const int order, const int start, const int maxNum)
{
for ( int i = 0 ; i < order; i ++ )
{
dist[i]
= * (edge + start * order + i);
if (dist[i] < maxNum && i != start)
path[i]
= start;
else
path[i]
= - 1 ;
}
bool isChanged = true ;

for ( int k = 2 ; (k < order) && isChanged; k ++ )
{
isChanged
= false ;
for ( int i = 0 ; i < order; i ++ )
{
for ( int j = 0 ; j < order; j ++ )
{
if (dist[i] > dist[j] + * (edge + j * order + i))
{
dist[i]
= dist[j] + * (edge + j * order + i);
path[i]
= j;
isChanged
= true ;
}
}
}
}
}
调用示例:

  
    
const int maxNum = 1e8;
int edge[ 7 ][ 7 ] =
{
{
0 , 6 , 5 , 5 , maxNum, maxNum, maxNum},
{maxNum,
0 , maxNum, maxNum, - 1 , maxNum, maxNum},
{maxNum,
- 2 , 0 , maxNum, 1 , maxNum, maxNum},
{maxNum, maxNum,
- 2 , 0 , maxNum, - 1 , maxNum},
{maxNum, maxNum, maxNum, maxNum,
0 , maxNum, 3 },
{maxNum, maxNum, maxNum, maxNum, maxNum,
0 , 3 },
{maxNum, maxNum, maxNum, maxNum, maxNum, maxNum,
0 }
};
int dist[ 7 ];
int path[ 7 ];
BellmanFord((
int * )edge, dist, path, 7 , 0 , maxNum);

 

你可能感兴趣的:(C++)