最短路径 (Dijkstra算法)

本文介绍了一种基于图的迪杰斯特拉最短路径算法的Java实现方式,通过逐步迭代来确定从起始节点到图中所有其他节点的最短路径。文章详细展示了算法的具体步骤,并提供了完整的代码示例。
public void shortestPath(int i) {
int n = this.vertexCount();
int vset[] = new int[n];//标记顶点
int path[] = new int[n];//i到j的 路径
int dist[] = new int[n];//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]);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值