Dijkstra
来源:互联网 发布:算法设计中文版 编辑:程序博客网 时间:2024/05/17 04:06
void Dijkstra( int v0 ) //求顶点v0 到其他顶点的最短路径
{
int i, j, k; //循环变量
for( i=0; i<n; i++ )
{
dist[i] = Edge[v0][i];
S[i] = 0;
if( i!=v0 && dist[i]<INF ) path[i] = v0;
else path[i] = -1;
}
S[v0] = 1;
dist[v0] = 0; //顶点v0 加入到顶点集合S
for( i=0; i<n-1; i++ ) //从顶点v0 确定n-1 条最短路径
{
int min = INF, u = v0;
//选择当前集合T 中具有最短路径的顶点u
for( j=0; j<n; j++ ) //(1)
{
if( !S[j] && dist[j]<min )
{
u=j;
min = dist[j];
}
}
S[u] = 1; //将顶点u 加入到集合S,表示它的最短路径已求得 //(2)
//修改T 集合中顶点的dist 和path 数组元素值 //(3)
for( k=0; k<n; k++ )
{
if( !S[k] && Edge[u][k]<INF && dist[u] + Edge[u][k] < dist[k] )
{
dist[k] = dist[u] + Edge[u][k];
path[k] = u;
}
}
}
}
{
int i, j, k; //循环变量
for( i=0; i<n; i++ )
{
dist[i] = Edge[v0][i];
S[i] = 0;
if( i!=v0 && dist[i]<INF ) path[i] = v0;
else path[i] = -1;
}
S[v0] = 1;
dist[v0] = 0; //顶点v0 加入到顶点集合S
for( i=0; i<n-1; i++ ) //从顶点v0 确定n-1 条最短路径
{
int min = INF, u = v0;
//选择当前集合T 中具有最短路径的顶点u
for( j=0; j<n; j++ ) //(1)
{
if( !S[j] && dist[j]<min )
{
u=j;
min = dist[j];
}
}
S[u] = 1; //将顶点u 加入到集合S,表示它的最短路径已求得 //(2)
//修改T 集合中顶点的dist 和path 数组元素值 //(3)
for( k=0; k<n; k++ )
{
if( !S[k] && Edge[u][k]<INF && dist[u] + Edge[u][k] < dist[k] )
{
dist[k] = dist[u] + Edge[u][k];
path[k] = u;
}
}
}
}
0 0
- dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- DIJKSTRA
- DIJKSTRA
- Dijkstra
- dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- Dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- Dijkstra
- dijkstra
- Dijkstra
- 用JS实现页内动态切换DIV的内容
- 人生处世的哲学
- 五个方法成为更好的程序员---学习和总结
- RAC下Voting disk和OCR的管理
- hdu1164
- Dijkstra
- javaGUI编程-----鼠标键盘监听
- NYOJ995硬币找零
- android sdk 如何重新生成debug.keystore
- Linux文件描述符限制
- HDU 1178 Heritage from father
- levelDB源码笔记(1)-TEST
- php,与ucenter同步用户登录,注册的教程
- 谈谈编程思想