Java之弗洛伊德算法
创建图及弗洛伊德核心算法
public class Graph {private char[] vertex;//存放顶点的数组private int[][] dis;//保存,从各个顶点出发到其他顶点的距离,最后的结果,也是保留在该数组private int[][] pre;//保存到达目标顶点的前驱顶点//构造器/*** @param length 大小* @param matrix 邻接矩阵* @param vertex 顶点数组*/public Graph(int length, int[][] matrix, char[] vertex) {this.vertex = vertex;this.dis = matrix;this.pre = new int[length][length];//对pre 数组初始化,注意存放是前驱顶点的下标for (int i = 0; i < length; i++) {Arrays.fill(pre[i], i);}}//显示pre数组和dis 数组public void show() {//为了显示便于阅读char[] vertex = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};for (int k = 0; k < dis.length; k++) {//先将pre数组输出的一行for (int i = 0; i < dis.length; i++) {System.out.print(vertex[pre[k][i]] + " ");}System.out.println();//输出dis数组的一行数据for (int i = 0; i < dis.length; i++) {System.out.print("(" + vertex[k] + "到" + vertex[i] + "的最短路径是" + dis[k][i] + ") ");}System.out.println();}}//弗洛伊德算法public void floyd() {int len = 0;//变量保存距离//对中间顶点遍历,k就是中间顶点的下标for (int k = 0; k < dis.length; k++) {//['A', 'B', 'C', 'D', 'E', 'F', 'G']//从i 顶点出发['A', 'B', 'C', 'D', 'E', 'F', 'G']for (int i = 0; i < dis.length; i++) {//到达j 顶点for (int j = 0; j < dis.length; j++) {len = dis[i][k] + dis[k][j];//求出从i顶点出发,经过k 中间顶点,到达j 顶点距离if (len < dis[i][j]) {//如果len 小于 dis[i][j]dis[i][j] = len;pre[i][j] = pre[k][j];//更新前驱顶点}}}}}
}
main方法及测试:
public static void main(String[] args) {//测试,图是创建成功char[] vertex = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};//创建邻接矩阵int[][] matrix = new int[vertex.length][vertex.length];final int N = 65535;matrix[0] = new int[]{0, 5, 7, N, N, N, 2};matrix[1] = new int[]{5, 0, N, 9, N, N, 3};matrix[2] = new int[]{7, N, 0, N, 8, N, N};matrix[3] = new int[]{N, 9, N, 0, N, 4, N};matrix[4] = new int[]{N, N, 8, N, 0, 5, 4};matrix[5] = new int[]{N, N, N, 4, 5, 0, 6};matrix[6] = new int[]{2, 3, N, N, 4, 6, 0};//创建对象Graph graph = new Graph(vertex.length, matrix, vertex);graph.floyd();graph.show();}
Java之弗洛伊德算法相关推荐
- 最短路径-弗洛伊德算法的java实现
弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗 ...
- 弗洛伊德算法(Java)
目录 第8章弗洛伊德算法 8.1算法介绍 8.2 算法图解 8.3 应用场景 8.4 代码实现 本次弗洛伊德算法算法 的教程出自韩顺平的数据结构与算法 第8章弗洛伊德算法 8.1算法介绍 弗洛伊德(F ...
- 弗洛伊德算法学习(Java)
弗洛伊德算法学习(Java) 学习视频:尚硅谷韩老师java讲解数据结构和算法 一. 弗洛伊德(Floyd)算法介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加 ...
- Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...
- 图解最短路径之弗洛伊德算法(Java实现)
概述 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法是一种在具有正或负边缘权重(但没有负环)的加权图中找到最短路径的 ...
- java堆排序图解_108-堆排序的思路图解_清华毕业老程序员亲授通俗易懂的Java数据结构和算法教程_Java视频-51CTO学院...
2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...
- 弗洛伊德算法(floyd)
算法背景: 图中的A,B,C,D,E,F,G,代表7个村庄,边上的权值带表两村庄之间的距离,现在要从某一个村庄,例如G村庄,往另外几个村庄送邮件,问任意一村庄到其他各村庄的最短距离分别是多少? 思路: ...
- Java数据结构与算法 一
整体框架: 算法 先简单 ==>做复杂,把复杂算法拆分成简单的问题 ==>解决问题 经典算法 1 字符串匹配 str1 = "nihdisoadisaoidhi" st ...
- 动态规划法(二)——弗洛伊德算法
问题描述 给定一个带权有向图,计算任意两结点间的最短路径. 迪杰斯特拉算法可以计算指定起点到所有结点的最短路径长度,因此分别对每个结点使用一次迪杰斯特拉算法即可求的任意两结点间的最短路径.迪杰斯特拉算 ...
最新文章
- SD卡的控制方法(指令集和控制时序)
- content 内容生成技术2
- 【LDA学习系列】Gibbs采样python代码
- 软件工程 / 为什么基于接口而非实现编程?
- 领域驱动设计 pdf_什么是领域驱动设计?
- express 4.*升级后带来的影响
- 【SICP练习】140 练习3.71
- php 数组转json乱码,php将数组转为json涌现中文乱码怎么办_后端开发
- 【C++对象模型】第一章 关于对象
- 通信(1)---LTE 整体架构
- 剑指offer面试题[7]-用两个栈实现队列
- linux程序cat本地文本文件,linux – 这里有cat的文件
- cocos2dx 常见的22种特效 3D特效
- win7 安装openssh_Windows安装OpenSSH服务
- 协同办公OA项目:搭建“自定义”OA办公系统,原来就这么简单!
- 手机vr玩电脑上的3d游戏以及看视频
- 店宝宝谈男士护肤美妆:千亿风口,巨头争锋
- 心灵成长的六个定律 (4) - By 武志红
- 解决英文、特殊字符自动换行
- 分布式文件系统:HDFS 核心原理