最短路径Dijkstra c实现
2011-04-01 22:28
204 查看
Code:
int Pnum;
int P[MAX_PC] = {0};
int S[MAX_PC];
float D[MAX_PC];
void ShortPath(float C[][MAX_PC], int v)
{
int i;
int j;
int k;
int v1;
int pre;
int min;
v1 = v -1;
// initialize distance value
for (i=0; i<Pnum; i++)
{
D[i] = C[v1][i];
if (i != v-1)
P[i] = v;
}
// the red set is null
for (i=0; i<Pnum; i++)
S[i] = 0;
S[v1] = 1;
D[v1] = 0;
// extend the red set
for (i=0; i<Pnum - 1; i++)
{
min = 1000000;
// add the shortest distance of node to the red set
for (j=0; j<Pnum; j++)
{
if ( (!S[j]) && (D[j] <min) )
{
min = D[j];
k = j;
}
//printf("k")
}
// add "k+1" to the red set
S[k] = 1;
for (j=0; j<Pnum; j++)
{
// Blue distance adjustment
if ( (!S[j]) && ( D[j] > D[k] + C[k][j] ) )
{
D[j] = D[k] + C[k][j];
P[j] = k + 1;
}
}
}
for (i=0; i<Pnum; i++)
{
printf("%f/n%d", D[i], i+1);
pre = P[i];
while (pre != 0)
{
printf("<--%d", pre);
pre = P[pre-1];
}
printf("/n");
}
}
int Pnum;
int P[MAX_PC] = {0};
int S[MAX_PC];
float D[MAX_PC];
void ShortPath(float C[][MAX_PC], int v)
{
int i;
int j;
int k;
int v1;
int pre;
int min;
v1 = v -1;
// initialize distance value
for (i=0; i<Pnum; i++)
{
D[i] = C[v1][i];
if (i != v-1)
P[i] = v;
}
// the red set is null
for (i=0; i<Pnum; i++)
S[i] = 0;
S[v1] = 1;
D[v1] = 0;
// extend the red set
for (i=0; i<Pnum - 1; i++)
{
min = 1000000;
// add the shortest distance of node to the red set
for (j=0; j<Pnum; j++)
{
if ( (!S[j]) && (D[j] <min) )
{
min = D[j];
k = j;
}
//printf("k")
}
// add "k+1" to the red set
S[k] = 1;
for (j=0; j<Pnum; j++)
{
// Blue distance adjustment
if ( (!S[j]) && ( D[j] > D[k] + C[k][j] ) )
{
D[j] = D[k] + C[k][j];
P[j] = k + 1;
}
}
}
for (i=0; i<Pnum; i++)
{
printf("%f/n%d", D[i], i+1);
pre = P[i];
while (pre != 0)
{
printf("<--%d", pre);
pre = P[pre-1];
}
printf("/n");
}
}
相关文章推荐
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路)Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- C++实现矩阵图的遍历·最小生成树(prim,kruskal)·最短路径(Dijkstra,floyd)
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 单源最短路径问题[Dijkstra实现]
- 单源最短路径问题[Dijkstra实现]
- Dijkstra 最短路径算法的一种高效率实现
- python 实现 Dijkstra最短路径问题
- Dijkstra 最短路径算法的一种高效率实现
- 迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短路径)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- Java实现求最短路径算法——————Dijkstra(迪杰斯特拉)
- 算法实现Java之最短路径迪杰斯特拉(Dijkstra)
- 数据结构之有向网邻接矩阵Dijkstra实现源点至其余各顶点最短路径
- Dijkstra最短路径VB实现
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- Dijkstra(迪杰斯特拉)最短路径算法之matlab实现(修正+验证)
- Java实现Dijkstra输出最短路径的实例
- 单源最短路径问题[Dijkstra实现]