用Java编辑实现warshall算法_warshall算法 java实现

Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正確处理有向图或负权的最短路径问题。当然这个问题也可以对每个顶点使用单源最短路径算法来求解,但Floyd-Warshall算法的形式更为简单。在此算法中采用图的邻接矩阵方式计算和理解起来会很简单。

Floyd-Warshall算法的原理是动态规划:

设D i,j,k为从i到j的只以(1..k)集合中的节点为中间節点的最短路径的长度。

1.若最短路径经过点k,则D i,j,k = D i,k,k ? 1 + D k,j,k ? 1;

2.若最短路径不经过点k,则D i,j,k = D i,j,k ? 1。

因此,D i,j,k = min(D i,k,k ? 1 + D k,j,k ? 1,D i,j,k ? 1)。

java的实现如下(以有向图为例,图结构采用邻接矩阵):

还是先定义顶点和边:

public class Edge {

int weight;

Vertex start;

Vertex end;

public Edge(Vertex a, Vertex b, int w) {

start = a;

end = b;

weight = w;

}

}

public class Vertex {

String key;

public Vertex(String k) {

key = k;

Floyd_Warshall.i++;

Floyd_Warshall.vertexList.add(this);

}

}

然后是Floyd_Warshall算法的核心:

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值