dijkstra单源最短路
来源:互联网 发布:java守护线程作用 编辑:程序博客网 时间:2024/05/16 15:50
/http://blog.csdn.net/v_july_v/article/details/6057286
http://blog.163.com/cindy_19810217/
http://blog.csdn.net/v_JULY_v/article/details/6126444
/*用迪杰斯特拉算法求有向网G的V0顶点到其他顶点的最短路径P,以及其带权长度D。其中P是二维数组,行号表示终点,列号表示经过的路径。P[v][w]为TRUE的意思就是从v0到v,要经过w点)。D是一维数组,表示某顶点到v0点的路径长(D[v] == 10表示从v0到v要经过的路径长度为10。final存放已经求得的路径结果(比如final[v]为TRUE表示已经找到v0到v的最短路径)。*/
void ShorttestPath_DIJ( MGraph G, int v0, PathMatrix &P, ShortPathTable &D)
{
for( v = 0; v < G.vexnum; ++v )
{
final[v] = FALSE;
D[v] = G.arcs[v0][v];
for( w = 0; w < G.vexnum; ++w )
{
P[v][w] = FALSE;
}
if( D[v] < INFINITY )
{ //如果有直接互通的两个顶点,直接将这个路径赋值到数组P[v]。
P[v][v0] = TRUE;
P[v][v] = TRUE;
}
}
D[v0] = 0; final[v] = TRUE;
/*下面开始主循环,每次求得v0到某个v顶点的最短路径,同时刷新之前的最短路径。*/
for( i = 1; i < G.vexnum; ++i )
{ // 对于除了v0之外的顶点(这个循环仅仅限制次数,i的值不用).
min = INFINITY; // 假定初始的“最小值”为无穷大。
for( w = 0; w < G.vexnum; ++w )
{
if( !final[w] ) // w顶点在V - S中,即还未确定的顶点。
if( D[w] < min )
{
v = w;
min = D[w]; // 随着循环进行,依与v0的距离大小,从小到大取得顶点v,并标记进final。
}
}
final[v] = TRUE; // 标记已经找到
for( w = 0; w < G.vexnum; w++ )
{ // 更新路径
if( !final[w] && (min + G.arcs[v][w] < D[w]) )
{
D[w] = min + G.arcs[v][w];
P[w] = P[v]; // 把一行都给赋值了
P[w][w] = TRUE;
}
}
}
}
- 单源最短路dijkstra算法
- 单源最短路(Dijkstra)-poj1502
- dijkstra单源最短路
- 单源最短路Dijkstra
- Dijkstra-算法-----单源最短路
- Dijkstra 算法 -单源最短路
- hdu1874 单源最短路Dijkstra
- 单源最短路->Dijkstra算法
- Dijkstra算法-单源最短路
- Dijkstra 单源最短路
- 单源最短路(dijkstra)
- 单源最短路—dijkstra算法
- 单源最短路 dijkstra + heap 实现
- Dijkstra 单源最短路 模板 uva11374
- 单源最短路Dijkstra算法源码
- 单源最短路 Dijkstra 算法 C++高效实现
- 单源最短路 Dijkstra O(mlogn) (类实现)
- Sicily 1031 Campus(单源最短路Dijkstra)
- web service 的handler使用
- 循环链表任意位置输出
- ggplot2_折线图
- android px sp dp (-百度)(菜鸟新手)
- Android Studio中新建library项目。
- dijkstra单源最短路
- 习题6-3 UVa536 Tree Recovery(树的遍历转换)
- 2016.3.5 14.6复习篇之二(蓝桥杯快速恶补)
- 创建一个Cordova完整应用
- jQery.form.js中文API【整理】
- php中递归函数
- Android应用程序打包时,出现错误:"XXX" is not translated in "af" , "am" , "ar" ....
- vector作二维数组应用
- fresco解析(2)之View