烦请各位高人帮忙讲解下Dijkstra算法
syhan 2006-01-02 02:17:47 用C#写了一个算法如下:
public void Dijkstra(int v1)
{
for (int i = 0; i < NodeList.Length; i++) //Nodelist.Length是这个图中顶点的大小
{
Dist[i] = Edge[v1, i]; //Edge[]是一个存放边的二维数组,Dist[]是用来存放顶点v1到其余顶点的最短路径的长度
S[i] = 0;
if (i != v1 && Dist[i] < MAXNUM) //maxnum是这个问题不会遇到的最大数
{
Path[i] = v1;//path存放最短路径上该顶点的前一顶点的顶点好
}
else
{
Path[i] = v1;
}
}
S[v1] = 1;
Dist[v1] = 0;
for (int i = 0; i < NodeList.Length - 1; i++)
{
int min = MAXNUM;
int u = v1;
for (int j = 0; j < NodeList.Length; j++)
{
if (S[j] != 0 && Dist[j] < min)
{
u = j;
min = Dist[j];
}
}
S[u] = 1;
for (int w = 0; w < NodeList.Length; w++)
{
if (S[w] != 0 && Edge[u, w] < MAXNUM && Dist[u] + Edge[u, w] < Dist[w])
{
Dist[w] = Dist[u] + Edge[u, w];
Path[w] = u;
}
}
}
}
按照我的理解来说,当我给出了这个函数的参数v1(就是说我给出要寻找一个顶点,例如说1)那么这个顶点到其他所有顶点的最短路径的长度都存在了Dist[]中,如果我要得到1到9的最短路径的值,那么我只要取出Dist[9]就可以了,大家说我的理解对吗?
可是在我的程序中这样做好像是不对的,取出来的这个值等于零,而当我求v1的相邻节点的最短路径时就是可以的,得到了正确结果1。