# 最短路径Dijkstra算法(JAVA)

/*

* Graph.java

*/

class Vertex {

public char label;

public boolean isInTree;

public Vertex(char label) {

this.label = label;

isInTree = false;

}

}

//sPath[]用来存储父节点和距离。

class DistPare {

public int parentVertex;

public int distance;

public DistPare(int parentVertex, int distance) {

this.parentVertex = parentVertex;

this.distance = distance;

}

}

public class Graph {

private final int MAX_VERTEX = 20;

private final int INFINITY = 999999;

private int nVerts;

private int nTree;

private int currentVertex;

private int startToCurrent;

private Vertex vertexList[];

private DistPare sPath[];

public Graph() {

vertexList = new Vertex[MAX_VERTEX];

sPath = new DistPare[MAX_VERTEX];

nVerts = 0;

nTree = 0;

for(int i=0; i<MAX_VERTEX; i++)

for(int j=0; j<MAX_VERTEX; j++)

}

vertexList[nVerts++] = new Vertex(label);

}

//有向图

public void addOneEdge(int start, int end, int weight) {

}

public void dijkstra() {

int startTree = 0;

vertexList[startTree].isInTree = true;

nTree = 1;

for(int j=0; j<nVerts; j++) {

sPath[j] = new DistPare(startTree, tempDist);

}

while(nTree<nVerts) {

int indexMin = getMin();

int minDist = sPath[indexMin].distance;

if(minDist == INFINITY) {

System.out.println("有无法到达的顶点");

}

else {

currentVertex = indexMin;

startToCurrent = sPath[indexMin].distance;

}

vertexList[currentVertex].isInTree = true;

nTree ++;

}

displaypaths();

}

private void displaypaths() {

for(int j=0; j<nVerts; j++) {

System.out.print(vertexList[j].label + "=");

if(sPath[j].distance == INFINITY)

System.out.print("inf");

else

System.out.print(sPath[j].distance);

char parent = vertexList[sPath[j].parentVertex].label;

System.out.print("(" + parent + ") ");

}

System.out.println(" ");

}

int column = 1;

while(column < nVerts) {

if(vertexList[column].isInTree) {

column ++;

continue;

}

int startToFringe = startToCurrent + currentToFringe;

int sPathDist = sPath[column].distance;

if(startToFringe<sPathDist) {

sPath[column].parentVertex = currentVertex;

sPath[column].distance = startToFringe;

}

column ++;

}

}

private int getMin() {

int minDist = INFINITY;

int indexMin = 0;

for(int j=0; j<nVerts; j++) {

if(!vertexList[j].isInTree && sPath[j].distance<minDist) {

minDist = sPath[j].distance;

indexMin = j;

}

}

return indexMin;

}

}

/*

* Dijkstra.java

*/

public class Dijkstra {

public static void main(String[] args) {

Graph theGraph = new Graph();

System.out.println("Dijkstra: ");

theGraph.dijkstra();

}

}

• 本文已收录于以下专栏：

## 单元Dijkstra算法求最短路径的的Java实现

• qq_20991785
• 2015年03月17日 11:08
• 865

## 单源最短路径（ Dijkstra算法）JAVA实现

• gloria0610
• 2014年04月15日 10:40
• 4967

## Dijkstra 最短路径算法的一种高效率实现

• qsd007
• 2007年04月01日 20:51
• 1970

## 最短路径的Dijkstra算法（邻接表）

• axiqia
• 2016年03月25日 22:38
• 6107

## （ACM）Dijkstra最短路径算法

１  最短路径算法  在日常生活中，我们如果需要常常往返A地区和B地区之间，我们最希望知道的可能是从A地区到B地区间的众多路径中，那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题， ...
• u012860063
• 2014年02月22日 09:19
• 2589

## 通俗算法讲解之图最短路径——Dijkstra算法

Dijkstra算法计算单源有向正权值图最短路径计算
• qq_26849233
• 2016年10月27日 19:05
• 810

## 最短路径 输出路径 Dijkstra算法

• qq_36183935
• 2017年04月03日 20:38
• 1952

## 经典算法——迪杰斯特拉（Dijkstra）最短路径

• hezhangping
• 2016年08月27日 15:30
• 2331

## 获取多条最短路径的Dijkstra算法

• u013615687
• 2017年04月04日 14:43
• 1148

## 经典算法之图的最短路径(一)：Dijkstra算法

Dijkstra算法可以说基本上每一本有讲到图的最短路径的书上都会有的一个算法，但基本上都是讲原理和伪代码，今天自己用Java代码给实现了一下，记录在此。 Dijkstra算法只是解决某些图的最短路径...
• silent_strings
• 2015年09月01日 15:50
• 2813

举报原因： 您举报文章：最短路径Dijkstra算法(JAVA) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)