国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java實現Floyd算法

2024-07-13 10:15:53
字體:
來源:轉載
供稿:網友

Floyd算法:用于多源最短路徑的求解,算出來的是所有的節點到其余各節點之間的最短距離。

該算法的思路是:首先初始化距離矩陣,然后從第一個點開始逐漸更新矩陣點值。d[i][j]表示從i點到j點的距離。第k次更新時,判斷d[i][k]+d[k][j]與d[i][j]的大小,如果前者小,則更新這個值,否則不變。

給一個例子:

java,Floyd

具體的floyd實現算法如下[java] view plain copy

package com.blyang;  public class Floyd {      int[][] Matrix;   char[] Nodes;      private final int INF = Integer.MAX_VALUE;      public Floyd(char[] Nodes, int[][] Matrix){     this.Nodes = Nodes;     this.Matrix = Matrix;   }      public void floyd(){          int[][] distance = new int[Nodes.length][Nodes.length];          // 初始化距離矩陣     for(int i=0; i<Nodes.length; i++){       for(int j=0; j<Nodes.length; j++){         distance[i][j] = Matrix[i][j];       }     }          //循環更新矩陣的值     for(int k=0; k<Nodes.length; k++){       for(int i=0; i<Nodes.length; i++){         for(int j=0; j<Nodes.length; j++){           int temp = (distance[i][k] == INF || distance[k][j] == INF) ? INF : distance[i][k] + distance[k][j];           if(distance[i][j] > temp){             distance[i][j] = temp;           }         }       }     }          // 打印floyd最短路徑的結果     System.out.printf("floyd: /n");     for (int i = 0; i < Nodes.length; i++) {       for (int j = 0; j < Nodes.length; j++)         System.out.printf("%12d ", distance[i][j]);       System.out.printf("/n");     }   } } 

在實現之后,針對上圖的點和權值,給定一個測試:

package com.blyang;  public class Main {        public static void main(String[] args) {     int INF = Integer.MAX_VALUE;          char[] Nodes = {'0', '1', '2', '3'};     int matrix[][] = {          /*A*//*B*//*C*//*D*/      /*A*/ {  0,  1,  2,  1},      /*B*/ { INF,  0, INF, INF},      /*C*/ { INF,  3,  0,  1},      /*D*/ { INF,  1,  1,  0},      };            int[] dist = new int[Nodes.length];        Floyd floyd = new Floyd(Nodes, matrix);     floyd.floyd();    }    } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂托克旗| 高平市| 东源县| 清涧县| 达孜县| 湘潭县| 玉溪市| 通城县| 平塘县| 南开区| 江山市| 廊坊市| 淮北市| 湖口县| 即墨市| 上高县| 依安县| 沈丘县| 化德县| 涿鹿县| 江门市| 鄂托克旗| 横山县| 黑河市| 象州县| 阿瓦提县| 栾城县| 临邑县| 兰考县| 竹溪县| 三明市| 珠海市| 台州市| 托克托县| 肇东市| 石泉县| 安新县| 三门峡市| 瓮安县| 改则县| 迭部县|