您的位置:首页 > 其它

最短路径 (Dijkstra算法)

2013-11-24 20:54 225 查看
public void shortestPath(int i) {
int n = this.vertexCount();
int vset[] = new int
;//标记顶点
int path[] = new int
;//i到j的 路径
int dist[] = new int
;//i到j 点的总长度
vset[i] = 1;
for(int j = 0;j < n;j++) {//初始化
dist[j] = this.getWeight(i, j);
path[j] = i;
}

for(int j = 0;j < n;j++) {
int u = -1;
int MAX = MAX_INT;
for (int k = 0;k < n;k++) //找最小
if (vset[k] == 0 && dist[k] < MAX) {
u = k;
MAX = dist[k];
}
if (u == -1) break;//没有最小的
vset[u] = 1;
for (int k = 0;k < n;k++) //用找到的最小进行调整
if(vset[k] == 0 && dist[u] + this.getWeight(u, k) < dist[k]){
dist[k] = dist[u] + this.getWeight(u, k);
path[k] = u;
}
}

for (int j = 0;j < n;j++) {
if(j == i) continue;
String str = "";
int u = j;
str = "->v" + j;
while (path[u] != i) {
str = "->v" + path[u] + str;
u = path[u];
}
str = "v" + i + str;
System.out.print(str + " ");
if(dist[j] == MAX_INT)
System.out.println("无最短路径");
else
System.out.println(dist[j]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dijkstra