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);

 

posted on 2010-11-02 12:57  ltang  阅读(467)  评论(0编辑  收藏  举报

导航