首页 > 编程语言 >java-floyd最短距离算法

java-floyd最短距离算法

时间:2022-10-28 14:36:32浏览次数:35  
标签:java int mMatrix System private floyd 短距离 edgeSpace out


java-floyd最短距离算法

public static void main (String[] args){
MatrixDG matrixDG = new MatrixDG();
System.out.println("初始化邻接矩阵");
matrixDG.printMatrix();
System.out.println("运行 floyd 算法");
matrixDG.floyd();
System.out.println("最终值");
matrixDG.printMatrix();
}
public static class MatrixDG{
private char[] mVexs=new char[]{'a','b','c','d'};//顶点集合
private int[][] mMatrix;//邻接矩阵
private int mnfinity=99;//表示无穷大
//创建图,根据已有的数据
public MatrixDG(){
//初始化顶点边
initEdge();
//初始化边,及距离
initEdgeSpace();
}

/**
* floyd 佛洛伊德
*/
private void floyd(){
//输入顶点数和边数
int n = mVexs.length;//vertex,顶点数
int [][] e = mMatrix;
//Floyd-Warshall算法核心语句(设k为中转节点,计算节点i到节点j的距离值)
for(int k=0;k<n;k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (e[i][j] > e[i][k] + e[k][j]) {
e[i][j] = e[i][k] + e[k][j];
}
}
}
}
}
private void initEdge(){
//输入顶点数和边数
int vlen = mVexs.length;//vertex,顶点数
int elen = mVexs.length;//edge,边数
//初始化边
mMatrix = new int[vlen][elen];
//初始化,使相同顶点距离为0,到其他订单距离为正无穷
for(int i=0;i<vlen;i++){
for(int j=0;j<elen;j++){
if(i==j){
mMatrix[i][j]=0;
}else{
mMatrix[i][j]=mnfinity;
}
}
}
}
//初始化,边及距离
private void initEdgeSpace(){
edgeSpace('a','b',2);
edgeSpace('a','c',6);
edgeSpace('a','d',4);

edgeSpace('b','c',3);

edgeSpace('c','a',7);
edgeSpace('c','d',1);

edgeSpace('d','a',5);
edgeSpace('d','c',12);
}

/**
*
* @param e1 边
* @param e2 边
* @param space 距离
*/
private void edgeSpace(char e1,char e2,int space){
int i= getPosition(e1);
int j= getPosition(e2);
mMatrix[i][j]=space;
}
//获取字符在数组中的位置
private int getPosition(char ch){
for(int i=0;i<mVexs.length;i++){
if(mVexs[i] == ch)
return i;
}
return -1;
}

//打印邻接矩阵
private void printMatrix(){
//顶点
for(int i=0;i<mVexs.length;i++){
if(i==0) {
System.out.print("\t");
}
System.out.print(mVexs[i] + "\t");
}
System.out.println();
//顶点的邻接表
for(int i=0;i<mVexs.length;i++){
System.out.print(mVexs[i] + "\t");
for(int j=0;j<mVexs.length;j++) {
System.out.print(mMatrix[i][j] + "\t");
}
System.out.println();
}
}
}

 

标签:java,int,mMatrix,System,private,floyd,短距离,edgeSpace,out
From: https://blog.51cto.com/u_4518216/5804850

相关文章

  • Java-五种线程池,四种拒绝策略,三类阻塞队列
    Java-五种线程池,四种拒绝策略,三类阻塞队列(常用)三类阻塞队列:   //1有界队列   workQueue=newArrayBlockingQueue<>(5);//基于数组的先进先出(FIFO)队列,支持公......
  • java-并发集合-阻塞队列 LinkedBlockingQueue 演示
    java-并发集合-阻塞队列LinkedBlockingQueue演示packageme.grass.demo.concuronte;importjava.util.Date;importjava.util.concurrent.CountDow......
  • java-并发集合-并发hash表 ConcurrentHashMap 演示
    java-并发集合-并发hash表 ConcurrentHashMap演示packageme.grass.demo.concurrent;importjava.util.Date;importjava.util.concurrent.Concurr......
  • java-并发集合-并发队列 ConcurrentLinkedQueue 演示
    java-并发集合-并发队列ConcurrentLinkedQueue演示目标:模拟5个线程同时并发读取“并发队列”,并使用CountDownLatch类协助计算消费耗时。pack......
  • 使用jvmti dll |so 加密java class jar包
    dll代码 //dllmain.cpp:定义DLL应用程序的入口点。#include"pch.h"#include<iostream>#include<jni_md.h>#include<jni.h>#include<jvmti.h>#include......
  • Java集合
    List和Set的区别:List:有序,按对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用Iterator取出所有元素,再逐一遍历,还可以使用get(intindex)获取指定下标的元素......
  • Java程序员就业方向主要有哪几个?
    1、Android开发Android是全球最大的智能手机操作系统,根据StrategyAnalytics最新研究报告显示,全球智能手机出货量在2016年第三季度达到3.75亿台。Android操作系统获得了创......
  • 【JavaSE】Java常用类
    1.String的特性代表字符串,java中所有字符串字面值都作为此类的实现例实现。String是一个final类,不能被继承。String实现了Serialiable,表示字符串支持序列化,实现了Comarabl......
  • Java™ Management Extensions Technology Stack
    JavaPlatform,StandardEditionJavaManagementExtensionsGuideJava™ManagementExtensionsInstrumentationandAgentSpecification,v1.2Java™ManagementEx......
  • java commond
    #!/bin/bash#参数配置#jar包路径jarPath=/app/beifa/20221008#jar包名称jarName=htsc-svc-data-migration-10-08#log日志输出路径logPath=/app/betalpha/htsc/log......