首页 > 代码库 > Dijkstra算法

Dijkstra算法

Dijkstra算法又称单源点距离最短问题

设一个图中有V0,V1,V2,V3...等顶点,这里设求的是V0到V1,V2,...的最短距离

基本思想

V0到剩余顶点的直接距离dist[](不经过其他任何节点,没有联通的设为无穷大)中,找出一个最小的,设其顶点为V1,这里我们就求出了V0到V1的最短距离。

将V0和V1划分到一个集合中(最短距离已经求出的顶点集合)S,用V0直接到Vx的距离与V0V1Vx的距离进行比较,如果后者小更新dist[]

一直重复下去,直到找出所有节点的最短距离

Ps:语文没学好,加上不太想画图之类的弄,仅仅记录一下

上代码吧

 1 package com.gxf.graph; 2  3 /** 4  * @author xiangfei 5  * 6  */ 7 public class Graph { 8     //这里用邻接矩阵存储图 9     int cost[][] = new int[6][6];10     int max = 1000;11     int dist[] = new int[6];12     public Graph(){13         //初始化矩阵14         for(int i = 0; i < 6; i++){15             for(int j = 0; j < 6; j++){16                 cost[i][j] = max;17             }18         }//for19         cost[0][2] = 10;20         cost[0][4] = 30;21         cost[0][5] = 100;22         cost[2][3] = 50;23         cost[3][5] = 10;24         cost[4][3] = 20;25         cost[4][5] = 60;26     }27     28     /**29      * 获取v到其他顶点最短距离保存到数组dist[]中30      * @param v31      */32     public void shotPath(int v){33         boolean s[] = new boolean[6];//s保存是否已经求出最短距离节点34         35         //初始化36         for(int i = 0; i < 6; i++){37             s[i] = false;38             if(cost[v][i] < max){39                 dist[i] = cost[v][i];40             }41             else{42                 dist[i] = max;43             }44         }//for45         s[v] = false;46         //开始找到每个节点的最短距离,根据算法思想至少要n - 1次47         for(int i = 0; i < 5; i++){48             int tempMin = max;49             int k = i;//存放最小距离的顶点50             //找出最短的,加入s集合中51             for(int j = 0; j < 6; j++){52                 if(!s[j] && dist[j] < tempMin){//在未求出最短距离的集合中找53                     tempMin = dist[j];54                     k = j;55                 }56             }57             s[k] = true;58             //更新dist[]数组59             for(int j = 0; j < 6; j++){60                 if(!s[j] && dist[j] > dist[k] + cost[k][j]){61                     dist[j] = dist[k] + cost[k][j];62                 }63             }64         }65         66     }67     /**68      * 输出矩阵内容69      */70     public void showCost(){71         System.out.println("矩阵内容是:");72         for(int i = 0; i < 6; i++){73             for(int j = 0; j < 6; j++){74                 System.out.print(cost[i][j] + "\t");75             }76             System.out.println();77         }//for78     }79     80     /**81      * 测试方法82      * @param args83      */84     public static void main(String args[]){85         Graph graph = new Graph();86         graph.showCost();87         graph.shotPath(0);88         for(int i = 0; i < graph.dist.length;i++){89             System.out.println("顶点0" + "到 顶点" + i + "的最短距离是:" + graph.dist[i]);90         }91     }92 }

Dijkstra算法