Java中的弗洛伊德(Floyd)算法
弗洛伊德Floyd算法
Floyd算法又稱(chēng)為插點(diǎn)法,是一種利用動(dòng)態(tài)規(guī)劃的思想尋找給定的加權(quán)圖中多源點(diǎn)之間最短路徑的算法,與Dijkstra算法類(lèi)似。
該算法名稱(chēng)以創(chuàng)始人之一、1978年圖靈獎(jiǎng)獲得者、斯坦福大學(xué)計(jì)算機(jī)科學(xué)系教授羅伯特·弗洛伊德命名。
Dijkstra算法是求一個(gè)出發(fā)節(jié)點(diǎn)到其他各節(jié)點(diǎn)的最短距離,而Floyd算法是求每個(gè)節(jié)點(diǎn)到其他個(gè)節(jié)點(diǎn)的最短距離
完整java代碼:
package com.yg.algorithm;/* @author Mu_Mu @date 2020/3/23 9:56 */ public class FloydAlgorithm { private static final int MAX=10000; public static void main(String[] args) { char[] vertexs = {'A', 'B', 'C', 'D', 'E'}; int[][] matrix = {{0, MAX, MAX, 5, 2}, {MAX, 0, 8, MAX, 3} , {MAX, 8, 0, MAX, 4}, {5, MAX, MAX, 0, 9},{2,3,4,9,0}}; FGraph fGraph = new FGraph(vertexs, matrix); fGraph.floyd(); fGraph.show(); } } class FGraph { private char[]vertexs;//存放頂點(diǎn) private int [][]dis;//每個(gè)頂點(diǎn)之間的距離 private int[][]pre;//存放前驅(qū)頂點(diǎn) public FGraph(char[] vertexs, int[][] dis) { this.vertexs = vertexs; this.dis = dis; pre=new int [vertexs.length][vertexs.length]; //初始化前驅(qū)頂點(diǎn) for (int i = 0; i < vertexs.length; i++) { for (int j = 0; j < vertexs.length; j++) { pre[i][j]=i; } } } //弗洛伊德算法 public void floyd() { int len=0; //i,遍歷中間頂點(diǎn),3層循環(huán)的意義就是j通過(guò)i到k for (int i = 0; i < vertexs.length; i++) { //j代表出發(fā)節(jié)點(diǎn) for (int j = 0; j < vertexs.length; j++) { //k代表終點(diǎn)頂點(diǎn) for (int k = 0; k < vertexs.length; k++) { //記錄j通過(guò)i到k的距離 len=dis[j][i]+dis[i][k]; //比較j通過(guò)i到k的距離是否小于j直接到k的距離 if (len < dis[j][k]) { dis[j][k]=len; pre[j][k]=pre[i][k]; } } } } } //打印圖 public void show() { for (int i = 0; i < vertexs.length; i++) { //打印前驅(qū)頂點(diǎn) for (int j = 0; j < vertexs.length; j++) { System.out.print(vertexs[pre[i][j]]+" "); } System.out.println(); //打印頂點(diǎn)之間的距離 for (int k = 0; k < vertexs.length; k++) { System.out.print(vertexs[i]+"到"+vertexs[k]+"的距離為:"+dis[i][k]+" "); } System.out.println(); } } }
到此這篇關(guān)于Java中的弗洛伊德(Floyd)算法的文章就介紹到這了,更多相關(guān)弗洛伊德Floyd算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法
今天小編就為大家分享一篇Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
這篇文章主要介紹了JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法,實(shí)例分析了java發(fā)送超文本文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05MyBatisPlus3.4.3版自動(dòng)生成代碼的使用過(guò)程
這篇文章主要介紹了MyBatisPlus3.4.3版自動(dòng)生成代碼的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04java實(shí)現(xiàn)sftp客戶端上傳文件以及文件夾的功能代碼
本篇文章主要介紹了java實(shí)現(xiàn)sftp客戶端上傳文件以及文件夾的功能代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02解決SpringBoot掃描不到公共類(lèi)的實(shí)體問(wèn)題
這篇文章主要介紹了解決SpringBoot掃描不到公共類(lèi)的實(shí)體問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08mybatis update set 多個(gè)字段實(shí)例
這篇文章主要介紹了mybatis update set 多個(gè)字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01springboot Controller直接返回String類(lèi)型帶來(lái)的亂碼問(wèn)題及解決
文章介紹了在Spring Boot中,當(dāng)Controller直接返回String類(lèi)型時(shí)可能出現(xiàn)的亂碼問(wèn)題,并提供了解決辦法,通過(guò)在`application.yaml`中設(shè)置請(qǐng)求和響應(yīng)的編碼格式,并在自定義配置類(lèi)中進(jìn)行配置,可以有效解決這一問(wèn)題2024-11-11java servlet手機(jī)app訪問(wèn)接口(一)數(shù)據(jù)加密傳輸驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了java servlet手機(jī)app訪問(wèn)接口(一),數(shù)據(jù)加密傳輸驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12